Analyse XML avec des caractères spéciaux (UTF-8)
Je suis partant avec un peu de XML qui ressemble à ceci (simplifié):
<?xml version="1.0" encoding="UTF-8"?>
<alldata>
<data name="Forsetì" />
</alldata>
</xml>
Mais après que je l'ai analysé avec simplexml_load_string
le caractère spécial (i) devient: ì
ce qui est évidemment assez mutilé.
Est-il un moyen pour éviter cela?
Je sais pour un fait que le XML est très bien, lors de l'enregistrement .txt et affichées dans le navigateur, les personnages sont très bien. Lorsque j'utilise simplexml_load_string sur le XML et ensuite enregistrer les valeurs dans un fichier texte, ou à la base de données, sa déformation.
Êtes-vous sûr que le codage de la page d'affichage est correct?
OriginalL'auteur Stomped | 2010-02-28
Vous devez vous connecter pour publier un commentaire.
Cela ressemble SimpleXML est la création d'une chaîne UTF-8, qui est ensuite rendu dans la norme ISO-8859-1 (latin-1) ou quelque chose de proche comme CP-1252.
Lorsque vous enregistrez le résultat dans un fichier et de le servir de ce fichier par l'intermédiaire d'un serveur web, le navigateur va utiliser l'encodage déclaré dans le fichier.
Y compris dans une page web
Depuis votre page web de codage n'est pas de l'UTF-8, vous avez besoin de convertir la chaîne quel que soit l'encodage que vous utilisez, par exemple ISO-8859-1 (latin-1).
Cela se fait facilement avec iconv():
Enregistrement de base de données
Vous colonne de base de données n'est pas en UTF-8 de classement, de sorte que vous devriez utiliser
iconv
pour convertir la chaîne de caractères du jeu de caractères que votre base de données utilise.En supposant que votre classement de base de données est le même que le codage que vous rendez, vous n'avez rien à faire, lors de la lecture de la base de données.
Explication
En UTF-8, un 0xc2 préfixe octet est utilisé pour accéder à la moitié supérieure de la "Latin-1 Supplement" bloc qui comprend des caractères tels que les lettres accentuées, les symboles monétaires, les fractions, les exposant 2 et 3, le droit d'auteur et de marque déposée des symboles, et l'espace insécable.
Cependant dans la norme ISO-8859-1, l'octet 0xC2 représente un Â. Ainsi, lorsque votre chaîne UTF-8 est interprété à tort comme l'un de ces, vous obtenez  suivie par quelques autres bêtises de caractère.
OriginalL'auteur Lachlan Roche
Il est très probable que le XML est bien, mais le personnage est mutilé lors de son stockage ou de sortie.
Si vous êtes de la sortie de données sur une page HTML: assurez-vous qu'il est encodé en UTF-8. Si votre page HTML est en ISO-8859-1, vous pouvez utiliser
utf8_decode
comme une solution rapide; l'utilisation de l'UTF-8 est la meilleure option à long terme.Si vous êtes de stocker les données dans une base de données mySQL, vous devez avoir UTF8 sélectionné comme l'encodage tout le chemin à travers: la connexion de l'encodage, dans le tableau, et dans la colonne(s) que vous insérez les données.
OriginalL'auteur Pekka 웃
J'ai aussi eu quelques problèmes avec cela, et il est venu à partir du script PHP de codage. Assurez-vous qu'il est défini à l'UTF-8.
Si c'est toujours pas bon, essayez d'imprimer la variable à l'aide uft8_encode ou utf8_decode.
OriginalL'auteur Daan
XML est stricte quand il s'agit d'entités, & doit être
&amp;
et ì devrait&igrave;
De sorte que vous aurez besoin d'une table de traduction.
OriginalL'auteur stillstanding
La fin de la partie... Mais j'ai été confronté à cela et résolu comme ci-dessous.
Vous avez déclaré l'encodage en XML, donc si vous chargez un fichier xml à l'aide DOMDocument il ne causera pas de problème.
Mais dans le cas où il arrive dans d'autres cas d'utilisation, vous pouvez utiliser
html_entity_decode
comme ci-dessous:OriginalL'auteur shyammakwana.me