2010-12-13 3 views
1

J'essaie d'utiliser une base de données pour stocker un ensemble de LONGTEXT que j'entrerai dans la base de données en utilisant un formulaire. Mais quand je mets des personnages tels que é ils sortent de la base de données , est-il possible de convertir tous les caractères accentués à des entités HTML en utilisant PHP avant qu'il ne soit envoyé à la base de données?preg_replacement des caractères accentués avec l'entité HTML alternate

Je suis au courant de htmlentities(); mais cela remplace aussi les caractères tels que < que je ne veux pas car il ne charge pas le code HTML lorsque le contenu est renvoyé sur la page.

Merci à l'avance

+0

Avez-vous essayé d'utiliser regex? – Lockhead

+0

Comment puis-je utiliser des expressions régulières pour remplacer les caractères accentués? – Brad

Répondre

4

Chaque fois que vous voyez des choses telles que , qui est un signe que vous avez un décalage charset.

Si votre base de données et votre code HTML sont tous codés en UTF-8, vous n'aurez aucun problème. Il y a des chances, que ce soit votre HTML ou la base de données est configuré pour utiliser Latin-1 (ISO 8859-1) et l'autre UTF-8 ou vice-versa.

Vous pouvez résoudre ce problème en unifiant un seul jeu de caractères. Personnellement, je préfère l'UTF-8, car il est universel. Cependant, si vous ne pouvez pas le faire, vous pouvez utiliser PHP pour passer de UTF-8 à Latin-1 en utilisant les fonctions suivantes.

UTF-8 à Latin-1:

$latin_string = utf8_decode($unicode_string); 

Latin-1 UTF-8:

$unicode_string = utf8_encode($latin_string); 

Si vous encodez vos données avant de l'envoyer à la base de données et le décoder avant d'afficher , ou vice-versa, selon votre configuration de base de données/html, votre problème sera résolu. Comme autre alternative, si vous avez l'extension PHP iconv disponible sur votre serveur, vous pouvez l'utiliser pour translittérer ou convertir en ASCII.

http://www.php.net/manual/en/function.iconv.php

1

Il semble que vous avez la base de données en utilisant un codage qui ne prend pas en charge vos caractères accentués. Jetez un oeil à l'encodage pour la base de données et la table et assurez-vous qu'ils utilisent un encodage Unicode-friendly. Je pense que le codage préféré le plus commun pour la base de données et la table est simplement UTF-8 Unicode (utf8).

Voir http://dev.mysql.com/tech-resources/articles/4.1/unicode.html pour des informations sur UTF8 et l'encodage et les classements dans MySQL. Vous n'avez pas spécifié votre base de données, mais l'application doit être la même.

+0

Note: Cela ne répond pas à la question posée, mais résout potentiellement le problème qui a poussé la question. – ebynum

Questions connexes