2011-07-31 5 views
1

Je rencontre des problèmes avec une chaîne qui provient d'une page Web contenant des caractères étrangers.PHP: comment convertir des caractères étrangers de simple_html_dom en UTF8?

La chaîne est générée en analysant la page Web à l'aide de str_get_html(), suivie de $htmldom->innertext; (bibliothèque de classes simple_html_dom).

Lorsque je génère la chaîne à l'aide de htmlentities(), elle s'affiche correctement; mais en utilisant explode() sur la chaîne et en imprimant les parties, j'obtiens un bloc incliné avec un point d'interrogation dedans pour chaque caractère étranger.

Je dois stocker la chaîne dans une base de données MySQL utf8, j'ai donc besoin des caractères étrangers appropriés.

Ma page comporte un en-tête avec le jeu de caractères utf8.

J'ai déjà essayé mb_split() et preg_split(), mais ceux-ci ont le même problème.

Répondre

2

J'ai résolu le problème avec:

Il a une grande fonction seulement convertis quoi que ce soit à utf-8, peu importe de quelle source il provient (tant qu'il est déjà en Latin1 (iso 8859-1), Windows-1252 ou UTF8, ou un mélange d'entre eux).

Un grand merci à Sebastian Grignoli.

+0

Si cela a résolu votre problème, vous devez accepter cette réponse. :) –

1

PHP et UTF-8 n'est pas une très bonne combinaison. Certaines fonctions fonctionnent bien avec UTF-8, d'autres non, et les pires sont celles qui sont documentées pour fonctionner, mais en fait ne le font pas (comme DOMDocument).

Vous pouvez utiliser mb_convert_encoding() pour convertir les caractères multi-octets aux entités HTML, qui fournit habituellement une solution acceptable:

$string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'); 
+0

Dommage, cela ne fonctionne pas ... essayé utf8_encode() trop ... – Dylan

+0

'' utf8_encode() '' convertit une chaîne iso-8859-1 à utf-8, de sorte que peu de sens si votre source est déjà utf-8 ... Peut-être que le document source n'est pas en UTF-8? – Carpetsmoker

+0

Je n'ai aucune idée ... ça vient d'une page web existante, que je traite avec simple_html_dom, comment puis-je détecter l'encodage de cette page? (La même routine fonctionne très bien avec des caractères étrangers avec une page Web source différente!) – Dylan

Questions connexes