2010-01-12 6 views
2

J'ai une webapp qui stocke le texte français - qui inclut potentiellement des caractères accentués - dans une base de données MySQL. Lorsque les données sont récupérées directement via PHP, les caractères accentués deviennent gibbirish. Par exemple: qui r�fl�te la liste.Caractères accentués stockés dans la base de données MySQL

Par conséquent, j'utilise htmlentities() (ou htmlspecialchars()) pour convertir la chaîne en entités html, et tout va bien. Cependant, lorsque je produis des données qui contiennent à la fois des caractères accentués et des éléments HTML, les choses deviennent plus compliquées. Par exemple, <strong> est converti en &lt;strong&gt; et n'est donc pas compris par le navigateur.

Comment puis-je obtenir simultanément des caractères accentués correctement affichés et mon HTML correctement analysé?

Merci!

Répondre

10

Peut-être que vous pouvez jeter un oeil à utf8_encode() et utf8_decode()

+0

Nous avons dû le faire lorsque nous avons rencontré des caractères polonais dans notre base de données SQL, avec un peu de chance pour MySQL. – Daniel

+0

utf8_encode() a fait l'affaire. Merci! –

+2

-1 Cela peut fonctionner, mais cela peut ne pas fonctionner à cause de la raison pour laquelle vous pensez que cela fonctionne et que vous ne corrigez pas la cause du problème d'encodage. S'il vous plaît lisez [Ce que chaque programmeur absolument, positivement doit savoir sur les codages et les jeux de caractères pour travailler avec du texte] (http://kunststube.net/encoding/) pour ce que fait réellement utf8_ * et [Manipulation Unicode Front to Back In Une application Web] (http://kunststube.net/frontback/) pour savoir comment résoudre le problème. – deceze

3

Vous devez utiliser le codage UTF-8 pour stocker les données dans la base de données - alors tout devrait fonctionner comme prévu et ne htmlentities() sera nécessaire.

Assurez-vous que tous les aspects sont utf-8 - la base de données, le codage et le classement des tables et la connexion, côté client et côté serveur. Les choses pourraient fonctionner même si tout n'est pas utf-8, mais pourrait échouer horriblement lorsque vous ferez la sauvegarde & - c'est pourquoi je recommande utf-8 à travers le tableau.

+0

+1 voir cette réponse SO: http://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding/1348521#1348521 pour une liste de contrôle. –

+0

@martin clayton, merci pour le lien. Tout sur la liste de contrôle est respecté ... En outre, les données sont correctement stockées dans la base de données comme UTF-8 (c'est-à-dire pas de caractères étranges lorsque j'interroge directement la base de données). Des pensées sur ce qui pourrait causer le problème? (aussi, caractères accentués codés en dur dans l'affichage HTML correctement sans utiliser d'entités html) –

+0

Par suggestion d'OcuS, j'ai utilisé utf8_encode() et tout fonctionne bien. Quoi qu'il en soit, toujours intrigant. Merci pour votre aide les gars! –

0

Vous pouvez définir le classement des champs de base de données contenant le caractère accentué sur utf8_general_ci pour les prendre en charge.

Éventuellement, vous pouvez également définir le classement de la base de données, de sorte que tous les champs sont définis par défaut.

Questions connexes