JeuWeb - Crée ton jeu par navigateur
htmlentites en utf8 : manque de doc dans la doc de php? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : htmlentites en utf8 : manque de doc dans la doc de php? (/showthread.php?tid=4859)

Pages : 1 2


htmlentites en utf8 : manque de doc dans la doc de php? - php_addict - 01-06-2010

bonsoir

tiens je découvre un truc étrange:

avec

Code :
htmlentities($chaine, ENT_QUOTES, 'UTF-8')

la chaine: "saveur d\'automne" est convertit en "saveur d'automne"

mais rien ne semble dire dans la doc de php que les valeurs sont en décimal et non en hexadécimal... (' au lieu de ' )

c'est moi qui hallucine ou pas?

sachant qu'en html si tu écris ' ou ' ca affiche la même chose...

mais qui me dis que htmlentities($chaine, ENT_QUOTES, 'UTF-8') encodera toujours en décimal dans les futures versions de php???


RE: htmlentites en utf8 : manque de doc dans la doc de php? - Sephi-Chan - 01-06-2010

La documentation PHP ne dit effectivement pas si elle retourne de l'UTF8 hexadécimal ou décimal (on voit cependant dans les exemples que c'est la notation décimale qui est renvoyée). Les deux caractères sont équivalents (ça fait partie des spécifications de UTF-8 de proposer les deux notations), tu n'as rien à craindre pour la suite. Même si le comportement venait à changer, deux chaînes (l'une utilisant la notation décimale, l'autre hexadécimale) resteraient équivalentes.



Sephi-Chan


RE: htmlentites en utf8 : manque de doc dans la doc de php? - php_addict - 01-06-2010

(01-06-2010, 07:30 AM)Sephi-Chan a écrit : Même si le comportement venait à changer, deux chaînes (l'une utilisant la notation décimale, l'autre hexadécimale) resteraient équivalentes.

dans un délire parano je me suis dis si! ca changerais quelquechose si tu fais une recherche de caractères avec la valeur décimale et que c'est passé en hexa, mais bon là je suis un peu parano ;-)


RE: htmlentites en utf8 : manque de doc dans la doc de php? - Sephi-Chan - 01-06-2010

Je suppose que tu parles d'une recherche en base de données. Si le SGBD travaille lui-même en UTF-8, il saura quoi faire quand on lui demandera une comparaison de chaînes. Smile


Sephi-Chan


RE: htmlentites en utf8 : manque de doc dans la doc de php? - php_addict - 01-06-2010

(01-06-2010, 09:10 AM)Sephi-Chan a écrit : Je suppose que tu parles d'une recherche en base de données. Si le SGBD travaille lui-même en UTF-8, il saura quoi faire quand on lui demandera une comparaison de chaînes. Smile

tu veux dire que peut importe si tu cherche en bdd ' ou ' il trouvera ?

Par contre je viens de trouver un nouveau problème très étrange:

si dans un <input> HTML on passe comme valeur &#39;
alors on trouve dans l'header HTTP ceci: %27
et si on passe ce caractère encodé dans htmlentities($_POST['texte'], ENT_QUOTES, 'UTF-8');
alors on obtient &#039; (un ZERO a été ajouté)

exemple:


if(isset($_POST['texte']))
{
$texte=htmlentities($_POST['texte'], ENT_QUOTES, 'UTF-8');
echo $texte;
$connexion->exec("INSERT INTO test (texte) VALUES ( '$texte')");
}

?>

<form method="post" action="testttttttttttttttttt.php">
<input type="text" name="texte" value="<?php echo 'l&#39;eau';?>"/>
<input class="submit" type="submit" name="submit" value="Valider" />


PS: désolé je ne met pas de BBcode "code" car sinon les caractères sont convertit...

je sens que je vais avoir un gros probleme d'encodage...j'ai des variables tableaux avec des caractères style &#39; que je me sert dans des <select><option></select> , puis je stocke en BDD puis plus tard je recherche les caractères &#39; mais pas de bol il ont été modifiés en &#039; (avec un ZERO)... grrrr.....

tu me dira, "ben alors met des &#039; dans tes variables" mais bon...

as tu déjà eu ce genre de problème ???


RE: htmlentites en utf8 : manque de doc dans la doc de php? - Sephi-Chan - 01-06-2010

Pour te rassurer, tape ceci dans un logiciel qui supporte l'UTF-8 (au hasard, ton navigateur) ;

[pastebin]ZSRyXPDY[/pastebin]

Cette paranoïa va te faire rencontrer des problèmes dont tu ne te soucierais pas avec approche plus naïve.
N'ai pas peur, les gens qui ont conçu UTF-8 sont des gens intelligents. Et ceux qui l'implémentent le font aussi intelligemment.

Par ailleurs, pourquoi est-ce que tu fais tout ça ? Pourquoi convertir une chaîne en UTF-8 alors qu'elle l'est probablement déjà (je suppose que la page HTML qui affiche le formulaire est servie avec un Content-Type text/html; charset=utf-8) ?

Je veux pas être vexant, mais tu as l'air de brasser pas mal d'air au sujet d'UTF-8, alors que tout est transparent.


Sephi-Chan


RE: htmlentites en utf8 : manque de doc dans la doc de php? - Anthor - 01-06-2010

Pourquoi surtout utiliser htmlentities avec de l'utf8, puisque tu n'auras pas de problèmes avec les accents ?


RE: htmlentites en utf8 : manque de doc dans la doc de php? - php_addict - 01-06-2010

(01-06-2010, 10:01 AM)Sephi-Chan a écrit : (je suppose que la page HTML qui affiche le formulaire est servie avec un Content-Type text/html; charset=utf-8) ?

merci de ton aide

(01-06-2010, 10:01 AM)Sephi-Chan a écrit : Par ailleurs, pourquoi est-ce que tu fais tout ça ? Pourquoi convertir une chaîne en UTF-8 alors qu'elle l'est probablement déjà (je suppose que la page HTML qui affiche le formulaire est servie avec un Content-Type text/html; charset=utf-8) ?

oui il y a bien sur un charset=utf-8 , ceci dit "never trust user input" avec firebug tu peut très bien modifier le charset à la volé...

(01-06-2010, 10:27 AM)Anthor a écrit : Pourquoi surtout utiliser htmlentities avec de l'utf8, puisque tu n'auras pas de problèmes avec les accents ?

tiens c'est marrant ca je ne me souvenais plus pourquoi j'ai eu besoin de faire htmlentities($_POST['texte'], ENT_QUOTES, 'UTF-8'):
c'est très simple, enfin je crois, peut être que cela va vous faire rire...:

dans un <input> de formulaire: si tu rentres comme chaine: &é"' (les minuscules correspondants aux touches 1234 de ton clavier)

et bien tu n'obtiens pas du tout la même chose:

avec htmlentities($_POST['texte'], ENT_QUOTES) --> &amp;&Atilde;&copy;&quot;&#039;

avec htmlentities($_POST['texte'], ENT_QUOTES, 'UTF-8') --> &amp;&eacute;&quot;&#039;

essayez par vous même Wink

d'ailleurs si vous y comprenez quelque chose n'hésitez pas Wink


RE: htmlentites en utf8 : manque de doc dans la doc de php? - Anthor - 01-06-2010

http://php.net/manual/fr/function.htmlspecialchars.php

Y'a pas de raison de convertir autre chose que le nécessaire pour l'échappement. D'ailleurs la doc est complète sur cette fonction.
Sinon pour le tilde, c'est normal PHP n'est pas UTF8 par défaut, donc si tu ne précise pas, htmlentities est en ISO.


RE: htmlentites en utf8 : manque de doc dans la doc de php? - Sephi-Chan - 01-06-2010

Trop de Siteduzerotries… :triste3:

En fait, le Content-Type n'influe pas directement sur l'encodage des données envoyées, il dit juste au navigateur d'utiliser cet encodage pour interpréter la page.

Déjà, la première erreur, c'est d'altérer les données en entrée. Tu devrais entrer ce qu'on te donne comme on te le donne et utiliser un filtre à l'affichage.


Sephi-Chan