utf8 et htmlentities

ev
Invité n'ayant pas de compte PHPfrance

30 sept. 2009, 13:36

Bonjour à tous,

Je suis en train de refondre un site encodé à la base en iso-8859-1, en utf8.
D'après mes recherches, j'ai réencodé la BD en utf8 collation utf8_bin, puis vérifié que les fichiers aient bien été créés en utf8 sans BOM, puis corrigé le XHtml.
Tout semble ok.
Pourtant les données sortie de ma BD s'affiche avec des caractères de type � comme s'il s'agissait de caractère iso étant affiché en utf8...
Pour corriger cela, htmlentities convient, mais est-ce la seule solution ?

En effet, si c'est le cas, j'ai des milliers de "echo" à corriger et j'ai peur que mes yeux ne tiennent pas le choc ;-)

Merci de votre collaboration,

EV

ViPHP
ViPHP | 1136 Messages

30 sept. 2009, 14:03

Salut,

A mon avis , tes tables sont maintenant convertis , mais les données , non !

( c'est assez galére de passer les données d'une base ISO vers utf-8 je trouve )

de plus il faut veiller à ce que l'enregistrement se fasse en utf-8

Une petite requête avant une insertion : "SET NAMES utf8"

Ce paramètre peut aussi plus simplement être configuré dans le my.cnf

en ajoutant ces quelques lignes :

Code : Tout sélectionner

default-character-set=utf8 default-collation=utf8 collation_server=utf8_general_ci character_set_server=utf8 skip-character-set-client-handshake
Ensuite , si tu as toujours des problèmes , tu peux aussi utiliser utf8_encode()

Ch.

ev
Invité n'ayant pas de compte PHPfrance

30 sept. 2009, 16:19

Comment me conseilles-tu de procéder pour ré-encoder correctement mes anciennes données issus d'une base en latin1 en utf8 ?
Voici ce que j'essaie de faire, sans succès...

-Je fait un dump de mon ancienne BD latin1 en précisant qu'il s'agit d'un fichier iso-8859-1
-Je l'ouvre avec notepad++, remplace SET NAMES latin1 par SET NAMES utf8
-Je remplace tous les " collate latin1_general_ci" par " collate utf8_bin"
-Je remplace tous les " DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci" par " DEFAULT CHARSET=utf8 COLLATE=utf8_bin"
-Je click sur 'format' > 'convertir en UTF-8 (sans BOM)
-J'enregistre mon fichier
-Je l'importe dans ma nouvelle BD utf8 en précisant qu'il s'agit d'un fichier utf8
...
Merci d'avance

Mammouth du PHP | 985 Messages

30 sept. 2009, 16:29

Attention avant:
Si c'est juste un problème de htmlentities comme le laisse penser ton post:
Modifie la syntaxe de htmtentities() pour que cela fonctionne en UTF-8.
Exemple:
htmlentities($texte, ENT_QUOTES, 'UTF-8')
Ou utiliser simplement htmlspecialchars() au lieu de htmlentities()...
Exemple:
htmlspecialchars($texte, ENT_QUOTES, 'UTF-8')
Avant toute modifications importantes , essaye au moins cela :wink:

Ps:
Car htmlentities() et htmlspecialchars() utilisent par défaut l'encodage ISO.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 1136 Messages

30 sept. 2009, 16:40

J'ai créé un outil me permettant de convertir mes tables ..

vraiment vite fait , mais ça a fonctionné .

Nécessite PDO

http://lindev.fr/public/PHP/alter-0.1b.tar.gz

Trés simple à utiliser ... ( d'après mes souvenirs )

Ch.

bulldawg11
Invité n'ayant pas de compte PHPfrance

30 sept. 2009, 16:41

Ce n'est pas le problème des htmlentities...J'aimerais justement pouvoir m'en passer !

EV

Invité
Invité n'ayant pas de compte PHPfrance

30 sept. 2009, 17:00

Stopher, ton outil est génial, par contre, cela n'a malheureusement rien changé à mon problème.
Les caractères apparaissent bien sur mon client MySQL, par contre, j'ai toujours des � sur mon navigateur...

EV

ViPHP
ViPHP | 1136 Messages

30 sept. 2009, 17:11

Ton navigateur affiche tes pages avec quel encodage ?

Tes nouveaux enregistrements sont maintenant correct ou pas ?

Mammouth du PHP | 985 Messages

30 sept. 2009, 17:12

Et avec ce header en début de page:
header('Content-Type: text/html; charset=UTF-8');
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

bulldawg11
Invité n'ayant pas de compte PHPfrance

30 sept. 2009, 17:41

Merci, vous m'avez mis sur la voie ;-)

Problème résolu.
En fait j'utilise l'extension mysqli, qui ne tiens pas compte des configs my.cnf. Du coup le charset par défaut n'était pas bon.

Une très bonne chose de faite, merci pour votre réactivité