Page 1 sur 1

utf8 et htmlentities

Posté : 30 sept. 2009, 13:36
par ev
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

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 14:03
par stopher
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.

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 16:19
par ev
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

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 16:29
par Dr@ke
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.

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 16:40
par stopher
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.

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 16:41
par bulldawg11
Ce n'est pas le problème des htmlentities...J'aimerais justement pouvoir m'en passer !

EV

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 17:00
par Invité
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

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 17:11
par stopher
Ton navigateur affiche tes pages avec quel encodage ?

Tes nouveaux enregistrements sont maintenant correct ou pas ?

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 17:12
par Dr@ke
Et avec ce header en début de page:
header('Content-Type: text/html; charset=UTF-8');

Re: utf8 et htmlentities

Posté : 30 sept. 2009, 17:41
par bulldawg11
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é