conversion étrange de html_entity_decode

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : conversion étrange de html_entity_decode

Re: conversion étrange de html_entity_decode

par YannSVT » 10 oct. 2009, 09:42

Je viens de modifier mon code, la base MySQL est bien UTF8.
J'ai aussi viré le htmlentities, à la récupération des données.


J'ai aussi trouvé une doc sur l'utilisation d'utf-8 avec MySql:
En fait, il faut aussi indiquer au client MySql de traiter les données en utf-8, ce qui n'est pas fait par défaut
pour cela il faut à la connexion à la base (pour php >5.0.7) passer la commande suivante :

mysql_set_charset('utf8',$cnx);

Et là ça fonctionne.

Pour les versions de php antérieures, il faut passer

mysql_query("SET NAMES 'utf8'");


encore merci pour ton aide

Re: conversion étrange de html_entity_decode

par Dr@ke » 10 oct. 2009, 00:56

CONVERT(_utf8 '".html_entity_decode (utf8_encode($data[1]),ENT_QUOTES,"UTF-8")."' USING utf8)
Pourquoi convertir, encoder.... en UTF-8 les données si les données sont déjà comme tu sembles dire en UTF-8?
Tout ceci est de trop à mon avis...

Sinon il faut passer ta base donnée en UTF-8.
Ensuite pour éviter tous bugs, il faudra convertir les données déjà présentes dans ta base de données en UTF-8.

Quand tout sera exactement et correctement dans le même encodage -> tout sera bien plus simple.

Re: conversion étrange de html_entity_decode

par YannSVT » 09 oct. 2009, 23:49

merci pour l'info,

en attendant j'ai voulu être plus cohérent avec le reste de l'appli, j'ai donc passé tout en UTF-8.

Le format de la base mysql, les entêtes php : header('Content-Type: Text/html; charset: UTF-8');
j'ai même modifié les requêtes SQL pour être certain d'avoir de l'UTF8 :
- requête d'enregistrement :
$requete="UPDATE documents set ".$data[0]."=CONVERT(_utf8 '".html_entity_decode (utf8_encode($data[1]),ENT_QUOTES,"UTF-8")."' USING utf8) COLLATE utf8_general_ci where id=".$id;
Méthode lourdingue mais ça fonctionne.

Quand je regarde dans phpmyadmin, j'ai bien le signe €. Mais à la lecture j'ai un "?" dans un losange, pour faire simple les caractères ressortent encore en ISO8859-1 et non en UTF-8.
Si je change l''encodage dans Firefox en ISO c'est OK, mais le reste de l'appli est UTF-8 et les données sont récupérées via un appel ajax (j'utilise Ext.js) je ne peux donc pas tout changer, je suis obligé de rester en UTF-8

Re: conversion étrange de html_entity_decode

par Dr@ke » 09 oct. 2009, 15:02

Bonjour,
Es-tu certain que dans les headers qui sont envoyés par le serveur: l'encodage est bien exactement celui-ci: ISO-8859-15 ?

Sinon, peux tu tester en ajoutant au début des pages qui sont utilisées pour ton script le header suivant?
header('Content-Type: text/html; charset=ISO-8859-15');
En général, je croie, que ISO-8859-1 ne gère pas le caractère Euro alors que ISO-8859-15 -> Oui.
Et surtout, toujours vérifier que tout est configuré avec exactement le même encodage.

Ps:
Même chose pour l'encodage de la Bdd, mais là je pense que tu as déjà vérifié.


Ps 2:
En général htmlspécialchars() est largement suffisant, htmlentities() n'est vraiment pas nécessaire.
Donc ensuite un htmlspecialchars_decode()

Par contre, htmlspecialchars() et htmlentities() sont a utiliser au moment de l'affichage, donc logiquement le texte n'est pas censé être convertit au moment de l'insertion dans la Bdd et donc tu n'as plus besoin de le décoder avant l'insertion dans la base de données.
A part encore une fois, quelques situations particulières aussi.

conversion étrange de html_entity_decode

par YannSVT » 09 oct. 2009, 14:43

Bonjour,

Voila, j'ai une appli qui enregistre des données dans une base MySQL, exemple de requête utilisée
$requete="UPDATE documents set ".$data[0]."='".html_entity_decode($data[1],ENT_COMPAT, "ISO8859-15")."' where id=".$id;
dans la variable $data[1], il est possible de trouvé € (quelqu'un aurais saisi €) exemple : 'montant en &euros;'.
or dans la table MySQL je n'ai pas le signe € mais ¤ (¤).

Je ne comprend pas pourquoi la conversion ne correspond pas