htmlentities() - PHP - Programmation
Marsh Posté le 14-05-2006 à 19:30:54
Sisi, il a fait ce qu'il fallait, à savoir transformer tous les caractères bizarres en leur entités (y compris <, >, ', ", et & ). Du coup forcément le truc n'est plus interprété
Marsh Posté le 14-05-2006 à 19:42:48
A oki, merci beaucoup, mais j'ai étais un peu idiot sur ce coup là^^...
Alors autre problème. Ca, c'était un "problème" apparu suite a un "débogage"; j'explique:
J'ai un script qui appelle une variable dans une base de données.
Cette variable contient des caractères spéciaux, à savoir des "é", des "à" etc...Le navigateur me remplace tout par des "?", des ",", des "..." ...
Donc, on m'a dit sur le forum de EasyPHP que c'était un problème d'encodage, mais j'ai pas réussi à corriger le problème. (d'ailleurs si vous savez comment faire sans passer par htmlentities()... ).
Je me résout donc à opter pour cette dernière option.
Je récupère ma variable.
Je lui applique htmlentities.
Résultat: toujours pareil, ca n'a rien modifié, et quand je vais voir dans le source de ma page les "," (normalement devant être des "é" ) par exemple, restent des "," et non des &code;
Voilà. Ceci est mon véritable problème sur lequel je lutte depuis pas mal de temps...
Toujours prêt à m'aider?
Merci!
Marsh Posté le 14-05-2006 à 19:44:32
L'encodage de la base de données est lequel ? UTF-8 ? iso-8859-1 ? Parce que sinon y'aurait la solution de mettre toutes tes pages dans le même encoding que celui de la base, y'aurait plus de probs. Ou alors de changer l'encoding de la base lors de sa création...
Marsh Posté le 14-05-2006 à 19:49:41
Je ne connais pas l'encodage de ma base, par contre je connais celui de mes tables. La table qui m'interesse est en latin1_general_ci, et les champs à l'intérieur en latin1_swedish_ci (je ne sais pas comment les modifier...).
Mes pages sont en ISO-8859-1.
Marsh Posté le 14-05-2006 à 21:10:24
Personne n'a une petite idée? J'ai essayé encore de chercher, et toujours rien trouver de bien convaincant.
Merci.
Marsh Posté le 14-05-2006 à 21:16:27
Bah si toute la chaîne est en iso-8859-1, devrait pas y avoir de problème... (latin1 = iso-8859-1)... Pour le coup du swedish machin, c'est juste par exemple pour les comparaisons de chaînes, donc ça ne devrait pas influer l'encodage des strings...
Peut-être l'encodage par défaut de Mysql ? (C'est la 4.1) ?
Marsh Posté le 14-05-2006 à 21:36:24
Ok, mes tables et mes champs sont tous codés en latin1 maintenant (latin1_swedish_ci) et toujours ce problème. Bon je crois que je vais voir si il n'existe pas une petite fonction php qui pourrait résoudre mon problème.
Car la fonction htmlentities convertit certains comme les < > & etc... mais comment convertir tous les autres? (, ; : ( ) etc...)??
merci par avance.
Marsh Posté le 14-05-2006 à 21:41:20
Hum... Mais quand t'affiche le code source de la page, y'a quoi ? En regardant les header HTTP (des fois qu'il y aurait un charset: utf-8) ?
Marsh Posté le 14-05-2006 à 21:47:23
Merci de prendre du temps pour moi, jsuis désolé avec mes problèmes de débutant
Dans mon code source, je suis bien en 8859-1...
<head>
<title>Accueil</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
(au fait, ma version de MySQL est la 4.1.9, fournie avec EasyPHP 1.8)
Encore merci!
Marsh Posté le 14-05-2006 à 21:53:13
Et quand tu regardes la base par exemple avec phpMyAdmin, ou Mysql query Browser, comment s'affichent les données ?
Marsh Posté le 14-05-2006 à 21:57:38
Avec PMA, les données s'affichent avec des caractères bizarres (les mêmes que dans mes pages) (je ne pense pas que le probleme vienne donc de mes pages...)
Quand j'affiche les données avec le shell Dos, les données sont bien retranscrites.
Mais est-ce qu'il n'yaurait pas eu un bug ou quelque chose dans le genre tout au début de la création de ma base?
Marsh Posté le 14-05-2006 à 22:42:06
Il y a peut-être eu un problème lors de l'insertion. Faudrait tout réinsérer
Marsh Posté le 14-05-2006 à 22:55:03
Oui je crois que c'est le seul truc qu'il reste à faire. Heureusement que j'avais tout mis dans un fichier texte...!!
Marsh Posté le 14-05-2006 à 22:56:04
Yeah ! Vérifie aussi l'encoding du fichier texte, ça peut venir de ça. Genre si le fichier est en utf-8, ça risque de foirer
Marsh Posté le 14-05-2006 à 23:02:32
Bon, je viens de tout recréer (y'avait pas grand chose), le fichier texte était bien en ANSI...
Toujours le même problème. Ca me soule, je pète un câble !!! Je verrais çà une autre fois je crois!
Merci bien de tes réponses, j'espère que ca pourra en aider d'autres!
Bye!
Marsh Posté le 14-05-2006 à 23:04:49
Attention, ANSI et iso, c'est pas pareil, ça peut venir de là
Marsh Posté le 14-05-2006 à 23:09:09
??? Une lueur d'espoir!!! Dans le bloc-notes, j'ai pas beaucoup de choix...
ANSI
Unicode
Unicode big endian
UTF-8
Faut-il utiliser un logiciel spécial?
Marsh Posté le 14-05-2006 à 23:14:14
Ah moins que... Je sais pas, en utilisant un autre éditeur de texte ?
Marsh Posté le 14-05-2006 à 23:23:38
nan mais en fait, je pense pas que le problème vienne de là tout bien réfléchi, car ce qui se trouve dans mon fichier txt, je l'implante dans ma base avec copier/coller...Bon, je sais pas d'où vient mon problème, mais c'est grave docteur!! Que ceux qui ont le même problème se disent qu'ils sont dans une galère monstre! ^^ Nan, sérieux, ca fait pas rire c't'affaire!
Bon allez, je go dodo! Merci FlorentG pour ton aide, sympa!
Bye!
Marsh Posté le 15-05-2006 à 08:45:09
Re salut!
Alors voilà, ce matin j'ai testé avec htmlentities, ca marchait pas. Du coup, j'ai essayé de travailler sous PMA au lieu de travailler sous Dos, et là, les htmlentities ont marchés...
Bon, je suis content, mais en même temps, pas content...>>> je n'ai pas compris pourquoi!!
Edit: WAOU même mieux!!: je ne suis pas obligé d'utiliser htmlentities pour que celà fonctionne.
(mais vous me conseillez d'utiliser quand même cette fonction dans mes pages ou pas?)
(celà dit, ce que j'ai écrit plus haut est toujours valable: je n'ai toujours pas compris, c'est peut-être même encore pire maintenant...)
Voilà, Bye!
Marsh Posté le 15-05-2006 à 09:05:35
Tu n'as pas besoin d'utiliser htmlentities si l'encodage est le même sur toute la ligne. Par contre, pour afficher des données genre entrées par des utilisateurs, faut utiliser htmlspecialchars pour transformer les < > & en < > &
Marsh Posté le 15-05-2006 à 18:29:02
Salut!
Bon je vais utiliser htmlentities dans les formulaires, mais je pense aussi l'utiliser pour les variables de ma bdd, par sécurité...
Merci, bien! J'espère que ce topic servira à d'autres dans mon cas!
Marsh Posté le 15-05-2006 à 20:00:06
utilises pas htmlentities avant de mettre dans ta base hein, uniquement en sortie, sinon tu vas te retrouver avec du html dans ta bdd
Marsh Posté le 15-05-2006 à 20:07:58
A ok! mais est-ce que ce n'est pas une "sécurité" en plus que de le faire avant?. Comme ca si un jour y'a l'encodage qui pose problème, c'est une solution de secours non?
(ok, pour lire la bdd, ca doit etre un poil reloud... ^^, enfin je pense que c'est pour ca non? )
Marsh Posté le 16-05-2006 à 00:49:41
bah parce que si tu veux faire autre chose que de l'html (genre du xml) un de ces 4, tu pourras pas
Pour sécuriser ce qui rentre dans ta base, utilise mysql_real_escape_string()
Marsh Posté le 14-05-2006 à 19:25:42
Bonjour,
Alors voilà, pour des raisons de codage que je n'arrive pas à résoudre au niveau de ma BDD, je veux utiliser htmlentities. Quand j'essaye l'exemple de la doc PHP, ca ne marche pas:
<?php
$new = htmlentities("<a href='test'>Test</a>", ENT_QUOTES);
echo $new;
// <a href='test'>Test</a>
?>
et ca m'affiche à l'écran:
<a href='test'>Test</a>, c'est à dire, que htmlentites n'a rien fait...
Pourquoi? Merci d'éclairer ma lanterne!