2010-06-16 2 views
1

Matin,Comment puis-je convertir des caractères allemands pendant la lecture XML et écrire PHP dans mysql?

Je suis la saisie des données à partir d'un fichier XML dans ma base de données, mais ont une isse avec des mots allemands (qui sont dans le fichier XML par erreur)

Par exemple, le mot für apparaît dans mon XML für et apparaît donc le même dans ma base de données. Je sais que je pourrais faire une simple recherche/remplacement pour cette phrase exacte, mais je me demandais s'il y avait une façon plus intelligente de le faire car je ne peux pas prédire si d'autres mots allemands pourraient apparaître un jour dans le XML ?

AJOUT QUELQUES PLUS DE DETAILS

La source XML dit:

<?xml version="1.0" encoding="UTF-8" ?> 

et dans mon PHP je

$ DOMString = utf8_encode ($ dom-> saveXML (élément $));

Si je regarde dans le fichier XML avant de commencer à le lire, il a -

<title> - <![CDATA[ CoPilot Live v8 Europa für Android 8.0.0.644 ]]> </title> 

Merci.

Greg

+0

Quel est le codage du fichier XML? Le générez-vous vous-même? –

+1

Je pense que vous utilisez le mauvais encodage pour lire le xml, sonne comme l'encodage source est UTF-8 et vous lisez iso-8859-1 ou quelque chose comme ça –

+0

Je pense que les deux sont utf-8, j'ai ajouté quelques détails à ma question d'origine à ce sujet. – kitenski

Répondre

1

utiliser le même codage partout et il n'y aura pas de tels problèmes. et si vous devez choisir un encodage: utilisez UTF-8!

Si vous ne pouvez pas le changer (pourquoi jamais ...) vous devez utiliser utf8_decode pour obtenir les bonnes valeurs.

+0

Ceci est partiellement correct, mais pas la raison pour laquelle cela se produit. Si vous ne pouvez pas changer l'encodage, alors creuser un peu plus profond .. :) – dmp

+0

Je crois que j'utilise UTF-8 partout, j'ai ajouté plus de détails à ma question ... – kitenski

2

Cela se produit normalement lorsque les données UTF-8 sont découplées comme ISO-8859-1 par exemple. En UTF-8, le tréma allemand ü est représenté par deux octets, en ISO-8859-1, c'est un octet. les deux octets sont décodés un par un, ce qui donne un à et un ¼. Votre tâche serait:

  • lire octets
  • du XML les décoder en utilisant UTF-8

Vérifiez http://www.utf8-zeichentabelle.de/ pour les valeurs d'octets.

Cependant, dans l'ensemble, l'idée de résoudre ce problème est plutôt mauvaise. Vous finissez par deviner l'encodage, ne pas parler de mauvais caractères codés/décodés sont à nouveau codés/décodés ... bonne chance!

EDIT:

Je l'ai utilisé juniversalchardet, une bibliothèque pour deviner le codage de caractères, dans l'intervalle, et il semble fonctionner très bien. Peut-être que vous essayez.

0

N'oubliez pas que si vous utilisez DOMDocument, quel que soit l'encodage de votre script, il convertit tout en interne en UTF8.

De même, si vous utilisez htmlentities, sauf indication contraire, il utilisera par défaut le codage ISO-8859-1.Ça m'a pris un moment pour comprendre ça!

Commentaire utile here, également d'un point de vue allemand.

Questions connexes