2010-01-06 4 views
0

Je dois importer des données d'une base de données où l'encodage de caractères utilisé est ISO-8859-1 et le nouveau site que nous utilisons utilise UTF-8 . Le site sur lequel les données sont tirées est ancien, d'où la raison pour laquelle il est en ISO je présume encore.Conversion de charset ISO-8859-1 en UTF-8 en PHP

J'ai essayé les solutions suivantes sans résultats:

iconv

Néanmoins, après la publication d'une règle proposée à Mars 2008, qui aurait ont interdit ces éléments tout à fait, le Le service postal a reçu de nombreux commentaires s'opposant à son action prévue pour quatre raisons principales: (1) la langue originale était vague et trop large, de sorte que le service postal a changé le mot â € œmunitionsâ € à â € œexplosive appareils, â € (2) certains répondants se demandent si un tel problème même existait, bien que le service postal dit qu'il a â € œrecorded de nombreux incidents impliquant la découverte du courrier qui présentait caractéristiques possibles explosifs, â € (3) la règle proposée aurait eu violation de la deuxième Amendement et (4) le service postal n'a pas le pouvoir d'interdire la diffusion de tels articles.

à

Néanmoins, après la publication d'une règle proposée à Mars 2008, qui aurait ont interdit ces éléments tout à fait, le service postal a reçu de nombreux commentaires opposés son action prévue pour quatre grands raisons: (1) la langue originale était vague et trop large, donc le service postal a changé le mot appareils Âœexplosive, à ¢  €  (2) certains répondants se demandent si un tel problème existait même, si le service postal dit qu'il a à ¢  € Âœrecorded nombreux incidents impliquant la découverte du courrier que a affiché des caractéristiques de possible explosifs, (3) la règle proposée prétendument violé le deuxième Amendement, et (4) le service postal n'a pas le pouvoir d'interdire l'envoi de tels articles.

mb_convert_encoding

même résultat exact que ci-dessus.

utf8_encode

même résultat exact que ci-dessus.

utf8_decode

retire un résultat intéressant avec tous les? remplacements:

Néanmoins, après la publication d'une règle proposée à Mars 2008, qui aurait ont interdit ces éléments tout à fait, le Postal Service a reçu de nombreux commentaires opposés son action prévue pour quatre raisons principales: (1) le langue originale était vague et trop large, de sorte que le service postal a a changé le mot? Munitions? à ? dispositifs explosifs ,? (2) certains répondants se demandent si un tel problème existait même, bien que le service postal dit qu'il a? Enregistré de nombreux incidents impliquant la découverte du courrier qui présentait caractéristiques des possibles explosifs ,? (3) la règle proposée soi-disant violé le deuxième Amendement, et (4) le service postal n'a pas le pouvoir d'interdire l'envoi de tels articles.


pas exactement ce qu'il faut faire ici.

Toute aide serait appréciée!

Merci!

+0

Parfois, vous devez spécifier les arguments corrects pour iconv. Pouvez-vous s'il vous plaît être plus précis. –

+0

Avoir un problème similaire en passant de MySQL à PostgreSQL, où les caractères UTF-8 sont présents dans le texte ISO-8859-1 (en raison de copier un paste). – gahooa

+0

Etes-vous en train de déclarer que vous envoyez votre sortie en encodage UTF-8? – Gumbo

Répondre

0

Ce n'est pas ISO 8859-1, qui est la page de code Windows 1252:

>>> a=u'“' 
>>> print a.encode('cp1252').decode('utf-8') 
“ 
>>> 
1

Vous allez devoir être très complet avec cela. Entre la base de données et le navigateur Web, il ya de nombreux endroits où l'encodage peut devenir foiré.

  • Le du serveur de base de données charset et la collation du jeu de caractères
  • Le jeu de caractères de la base de données et la collation du jeu de caractères
  • connexion de la base de données et la collation du jeu de caractères
  • charset de chaque table de base de données et la collation du jeu de caractères
  • dans diverses fonctions PHP (par exemple en tant que htmlentities)
  • Le type de contenu HTTP

N'importe lequel d'entre eux pourrait potentiellement être le coupable. Vous avez peut-être réussi à convertir vos données d'ISO-08859-1 en UTF-8, mais cela ne signifie pas que vous les manipulez ou que vous les affichez correctement.

Pour vérifier vos trucs de base de données (sauf pour les paramètres spécifiques à la table), exécutez cette requête

select @@character_set_server 
    , @@collation_server 
    , @@character_set_database 
    , @@collation_database 
    , @@character_set_client 
    , @@character_set_connection 
    , @@collation_connection 
    , @@character_set_results 
; 

Vérifiez les instructions CREATE de votre table pour cette info (vous pouvez copier/coller ceux dans votre question si vous avez besoin aide)

Pour faire face au type de contenu HTTP (par exemple, le caractère de sortie de codage), assurez-vous que vous avez dans votre PHP quelque part avant la sortie

ini_set('default_charset', 'UTF-8'); 

Enfin, si cela ne vous aide pas, donnez-nous plus de détails. Quels paramètres utilisez-vous avec iconv?

+0

WORKED PERFECT - ini_set ('default_charset', 'UTF-8'); Merci monsieur! – Shane

0

La sortie de la requête que vous me donniez était la suivante:

latin1 latin1_swedish_ci
latin1 latin1_swedish_ci
latin1 latin1
latin1_swedish_ci
latin1

En ce qui concerne le jeu de caractères par défaut défini au début de la Fichier PHP, cela fonctionne pour certaines données, mais pas toutes.

De toute façon, toujours en regardant ici.