8792 sujets

Développement web côté serveur, CMS

Bonjour à tous !

Voilà, j'ai des petites questions qui me trotent dans la tête depuis un bout de temps...
Je ne suis pas développeur, professionnellement parlant, mais disons que comme beaucoup de gens, je m'amuse sur des projets persos (voire parfois plus).
Il y a une chose qui me gêne encore et toujours, et ce malgré la lecture de la FAQ de ce site, et du sujet sur "encodage : que choisir"...

Comment traiter les données, en entrée (formulaire) et en sortie ?

Avant j'utilisais HTMLENTITIES. Super, ça marchait en local... Moins super, ça marchait plus une fois en ligne !
Je veux dire par là : aucun problème à l'entrée, mais une fois dans la base et, surtout, une fois sorti, c'était l'horreur côté caractères accentués...
La page était déclarée comme suit :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">


On m'a demandé (j'étais en stage à cette époque ^^) d'enlever tous les htmlentities... Soit... Par contre j'ai bien entendu laissé les "addslashes".
Pour traiter les caractères accentués (ils y étaient dans la base, un "é" apparaissait bien "é" dans la base), j'ai fait la fonction suivante, qui agit sur la sortie :



function htmlent($variable) {
	$accentue=array("à","â","ä","é","è","ê","ë","î","ï","ô","ö","ù","ç");
	$htmlent=array("&agrave;","&acirc;","&auml;","&eacute;","&egrave;","&ecirc;","&euml;","&icirc;","&iuml;","&ocirc;","&ouml;","&ugrave;","&ccedil;");
	$variable= str_replace($accentue,$htmlent,$variable);
	$variable=stripslashes($variable);
	return ($variable);
}


En tout cas comme ça, ça marchait...

En gros, j'ai :

- En entrée, strip_tags si les formulaires sont accessibles aux visiteurs, et pour tous les formulaires : addslashes.
- En sortie, ma fonction htmlent.

Mais bon, j'ai l'impression de faire plus du bricolage qu'autre chose !

J'aurais aimé savoir ce que vous utilisez, dans un souci de respect des standards, permettant un site portable sur toute base.
(edit : si cela n'est pas trop utopique Smiley langue )
Modifié par Clemdups (22 Jun 2006 - 10:42)
Personellement, j'utilise addslashes et éventuellement strip_tags en entrée avant sauvegarde dans la base, et htmlspecialchars en sortie. Si nécessaire, je rajoute un utf8_encode ou decode.
Salut,
le tout dépend de la différence entre la config php du serveur et celle que tu as en local. Pour éviter les désagréments en ligne / en local, moi je commence toujours par regarder le php.ini du serveur et je mets les même paramètres en local.
Ensuite, j'espère ne pas dire de bêtises, mais j'ai choisi de passer mes bases de données en characterset UTF8 puisqu'il me semble qu'en indiquant le set de caractères ISO 8859-15, le navigateur affiche correctement les caractères sans passer par htmlentites.... mais je peux me tromper ?