Encodage des caractères problème avec PHP Simple HTML DOM Parser
Je suis à l'aide de PHP Simple HTML DOM Parser http://simplehtmldom.sourceforge.net/
pour récupérer des données comme le Titre de la Page, Meta Description et Meta Tags à partir d'autres domaines, puis l'insérer dans la base de données.
Mais j'ai quelques problèmes avec l'encodage. Le problème est que je ne reçois pas de corriger les caractères de ces site web qui n'est pas dans la Langue anglaise.
Ci-dessous le code:
<?php
require 'init.php';
$curl = new curl();
$html = new simple_html_dom();
$page = $_GET['page'];
$curl_output = $curl->getPage($page);
$html->load($curl_output['content']);
$meta_title = $html->find('title', 0)->innertext;
print $meta_title . "<hr />";
//print $html->plaintext . "<hr />";
?>
De sortie pour facebook.com
page
Welcome to Facebook — Log in, sign up or learn more
De sortie pour amazon.cn
page
亚马逊-网上è´ç‰©å•†åŸŽï¼šè¦ç½‘è´, å°±æ¥Z.cn!
De sortie pour mail.ru
page
Mail.Ru: почта, поиÑк в интернете, новоÑти, игры, развлечениÑ
Donc, les personnages n'est pas codé correctement.
Quelqu'un peut m'aider comment faire pour résoudre ce problème afin que je puisse ajouter correcte des données dans ma base de données.
Si je change de navigateur de l'encodage UTF-8, il fonctionne.
voir stackoverflow.com/questions/4550903/...
OriginalL'auteur Prakash | 2012-09-10
Vous devez vous connecter pour publier un commentaire.
@deceze et @Shakti merci pour votre aide.
+1 pour le lien de l'article publié par deceze (La manipulation de l'Unicode Avant en Arrière dans une Application Web) et il aussi la peine de lire La compréhension de codage
Après la lecture de vos commentaires, de répondre et de parcours de ces deux articles, j'ai enfin résolu mon problème.
J'ai listé les étapes que j'ai fait jusqu'à présent pour résoudre ce problème:
header('Content-Type: text/html; charset=utf-8');
sur le haut de ma init.php fichier,mysql_set_charset('utf8', $connection_link_id);
$meta_title = htmlentities(trim($meta_title_raw), ENT_QUOTES, 'UTF-8');
Maintenant, le problème semble être résolu, MAIS j'ai encore à faire chose suivante pour résoudre ce problème dans son intégralité.
$source_charset
.iconv()
. Exemple:iconv($source_charset, "UTF-8", $meta_title_raw);
Pour arriver
$source_charset
j'ai sans doute d'utiliser quelques astuces ou multi vérification. Comme la vérification des en-têtes et les meta-tags, etc. J'ai trouvé une bonne réponse à Détecter l'encodageLaissez-moi savoir si il y a des améliorations ou de toute anomalie sur mon étapes ci-dessus.
OriginalL'auteur Prakash
De sorte que vous êtes tout simplement pas le réglage de l'en-tête HTTP pour désigner votre document codé en UTF-8 et que le navigateur est en l'interprétant dans un autre encodage. Utilisation:
$meta_title
) à la base de données puis une autre page va retrive ceux de la valeur à partir de la base de données, mais sur cette page il n'est pas de travail même j'ai mis à l'UTF-8.Vous devez vous assurer que la base de données de connexion de courant est réglé pour accepter
utf-8
de données. Exécutez cette requêteSET NAMES UTF-8
avant d'envoyer une requête de base de données et assurez-vous également que votre base de données, table, colonne sont définies à l'encodage utf-8. Alors la configuration de l'UTF-8 à en-tête de votre page d'un autre devrait fonctionner.Ensuite, je vous recommande la lecture de Gestion de l'Unicode Avant en Arrière Dans Une Application Web
OriginalL'auteur deceze
J'ai eu le même problème avec les caractères roumain. Rien n'a fonctionné jusqu'à ce que j'ai utilisé
ISO-8859-2 étant le jeu de caractères d'europe de l'est des lettres. Afin de trouver le bon jeu de caractères de votre langue et de l'utiliser dans l'en-tête.
OriginalL'auteur Silviu