Htmlentities et l'Euro

Fermé
Utilisateur anonyme - 17 oct. 2015 à 02:55
 Utilisateur anonyme - 19 oct. 2015 à 15:46
Salut !
D'après PHP Manual ce qui suit doit prendre en charge le caractère de l'Euro.

htmlentities($_POST["Description"], ENT_QUOTES,"ISO-8859-15");

Eh bien après validation, le signe de l'Euro n'est pas converti en entité. Pourquoi ?
Merci

5 réponses

codeurh24 Messages postés 761 Date d'inscription samedi 29 mars 2014 Statut Membre Dernière intervention 8 septembre 2018 123
17 oct. 2015 à 05:24
Bonjour,
il faut tout mettre en utf-8, même le code source.


$chaine = "1€";
$encodeEnHTML = htmlentities($chaine, ENT_QUOTES,"UTF-8");
echo htmlspecialchars($encodeEnHTML) ;
0
Utilisateur anonyme
17 oct. 2015 à 07:57
Bonjour

La fonction htmlentities, pour traduire les caractères spéciaux en entités, a besoin de savoir quel est l'encodage de la chaîne, puisque les mêmes octets représentent des caractères différents selon l'encodage.

Quand tu écris :
htmlentities($_POST["Description"], ENT_QUOTES,"ISO-8859-15");

le paramètre "ISO-8859-15" veut dire que tu affirmes que la chaîne à traduire ($_POST["Description"]) était encodée en "ISO-8859-15". Si ta chaîne était encodée en autre chose (utf8 ou iso-8859-1 par exemple), tu trompes php, qui va décoder ta chaîne de manière incorrecte.

Tu ne peux pas choisir ce que tu veux pour ce troisième paramètre, tu es obligé de mettre l'encodage réel de ta chaîne.

C'est généralement infiniment plus pratique de tout faire systématiquement en utf8, même si ce n'est pas obligatoire.
0
Bonjour !
UTF-8 renvoie rien donc c'est pire.

htmlentities($_POST["Description"], ENT_QUOTES)

C'est pareil au UTF-8, plus rien.L'"ISO-8859-15" est sensé contenir l'Euro.

htmlentities($_POST["Description"], ent_compat,"ISO-8859-15");
Avec ent_compat ça marche mais les " et les ' ne sont plus encodés alors pourquoi ?

Obligé de mettre :
$Description=Str_Replace("€","€",$Description);

Quelle connerie ce htmlentities virgule barbara point d'exclamation !
0
Utilisateur anonyme
17 oct. 2015 à 16:27
L'"ISO-8859-15" est sensé contenir l'Euro.
Bien sûr que l' ISO-8859-15 contient l'euro. Mais ce n'est pas parce ce que tu écris "ISO-8859-15" que ta chaîne est en "ISO-8859-15" !
La fonction htmlentities ne change pas l'encodage de ta chaîne. Elle ne va pas faire apparaître l'entité html euro si ta chaîne n'en contient pas.

La première question à laquelle tu dois répondre c'est :
en quoi est actuellement encodée ta chaîne $_POST["Description"] ?

Ensuite, quand tu dis " les " et les ' ne sont plus encodés " que veux-tu dire ? htmlentities ne sert pas à "encoder" quelque chose. Avec ENT_COMPAT, les " sont convertis en entités html mais pas les '.

Es-tu sûr d'avoir compris ce qu'est l'encodage, et à quoi sert la fonction htmlentities ?
0
Bonjour, mon Père :)

non je ne pense pas avoir compris ça. Comment je peux savoir en quoi ma chaîne est encodée ?

La variable provient d'un textarea et si je veux les entités des " et des ' c'est pour la base de données. Pas besoin de mettre des addslashes et stripslashes à tout va.

HTTP-EQUIV est en UTF-8 cela vient-il de cela ? et la base de donnée est en DEFAULT CHARSET=latin1.
Merci
0
Utilisateur anonyme
19 oct. 2015 à 00:10
D'abord, pour l'encodage de ta chaîne : si tu as défini charset à utf-8, les données que tu récupères par POST sont encodées en utf-8. Ça répond à un premier point : le troisième paramètre de htmlentities doit être "UTF-8".
Mais tu as de nombreux autres problèmes.
Il faut d'abord que tes pages soient elles-mêmes écrites en utf-8. J'ignore quel éditeur tu utilises pour les écrire, mais il FAUT que tu les enregistres en UTF-8 SANS BOM.
Ensuite, si tu travailles en utf8, les tables de ta base de donnée doivent être en utf-8. Tu peux utiliser utf8_general_ci par exemple. Et il faut faire un "SET NAMES 'UTF8'" lors de la connexion à ta base.
Et enfin, il ne faut surtout pas utiliser htmlentities pour enregistrer des données dans une base. Ça n'est pas fait pour ça, c'est fait uniquement pour l'affichage des données. Pour enregistrer dans la base, même s'il y a des ' ou des ", il y a des méthodes adaptées, qui dépendent de ce que tu utilises comme base de données et comme interface (fonctions PDO ou mysql_ ou mysqli_ par exemple)
0
Pas simple, Le père ! :)

J'avais écrit le fichier en UTF8 car j'ai fait un programme pour ça et dès qu'il trouve un caractère UTF-8, il écrit le fichier en UTF-8. Hé bien je me suis retrouvé avec des caractères bizarre à la place des caractères accentués.

Le pire c'est seulement ce foutu Euro qui n'est pas encodé. Puisque je suis en UTF-8, pourquoi j'ai une chaine vide lorsque je mets htmlentities($_POST["Description"], ENT_QUOTES,"utf-8"). Là, je ne parle pas de la base de données, juste le formulaire avec un die(htmlentities($_POST["Description"], ENT_QUOTES,"utf-8")); pour voir ce que ça donne. Hé bien rien.

die(htmlentities($_POST["Description"], ENT_COMPACT,"ISO-8859-15"));
Affiche "€"

die(htmlentities($_POST["Description"], ENT_QUOTES,"ISO-8859-15"));
Affiche "€"

Aller comprendre quelque chose..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
19 oct. 2015 à 15:46
Si c'est si simple que ça. À condition de vraiment savoir ce qu'on fait.
As-tu un lien vers ton site ? Ou peux-tu mettre le fichier source php de ta page sur un site comme cjoint.com, pour que je puisse voir en quoi est réellement encodé ton code source, et ce que tu fais des données ?
N'oublie pas de cacher le mot de passe s'il y en a.
0