Я использую PHP Simple HTML DOM Parser http://simplehtmldom.sourceforge.net/
для получения данных, таких как название страницы, метаописание и метатеги из других доменов, а затем вставлять их в базу данных.
Но у меня есть некоторые проблемы с кодировкой. Проблема в том, что я не получаю правильных символов с тех сайтов, которые не находятся на английском языке.
Ниже приведен код:
<?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 />"; ?>
Выход для страницы facebook.com
Welcome to Facebook — Log in, sign up or learn more
Выход для страницы amazon.cn
亚马逊-ç½'上è´ç‰©å•†åŸŽï¼šè¦ç½'è´, å°±æ¥Z.cn!
Вывод на страницу mail.ru
Mail.Ru: почта, поиÑк в интернете, новоÑти, игры, развлечениÑ
Таким образом, символы не кодируются должным образом.
Может ли кто-нибудь помочь мне решить эту проблему, чтобы я мог добавить правильные данные в свою базу данных.
@deceze и @Shakti благодарит за вашу помощь.
+1 для ссылки на статью, отправленной deceze ( обработка Unicode Front to Back в веб-приложении ), и это также стоит прочитать. Понимание кодировки
Прочитав ваши комментарии, ответьте и, конечно, эти две статьи, я, наконец, решил свою проблему.
Я перечислил шаги, которые я сделал до сих пор, чтобы решить эту проблему:
header('Content-Type: text/html; charset=utf-8');
в верхней части моего файла init.php, mysql_set_charset('utf8', $connection_link_id);
$meta_title = htmlentities(trim($meta_title_raw), ENT_QUOTES, 'UTF-8');
Теперь вопрос, похоже, решен, НО мне все же нужно сделать следующее, чтобы решить эту проблему в ПОЛНОМ.
$source_charset
. iconv()
. Пример: iconv($source_charset, "UTF-8", $meta_title_raw);
Для получения $source_charset
мне, вероятно, придется использовать некоторые трюки или многократную проверку. Подобно проверке заголовков и метатега и т. Д., Я нашел хороший ответ при кодировании Detect
Сообщите мне, есть ли какие-либо улучшения или какие-либо ошибки на моих шагах выше.
Если я переключу кодировку браузера на UTF-8, она будет работать.
Таким образом, вы просто не устанавливаете правильный HTTP-заголовок для обозначения вашего документа как кодированного UTF-8, а браузер интерпретирует его в какой-либо другой кодировке. Использование:
header('Content-Type: text/html; charset=utf-8');
У меня была такая же проблема с румынскими персонажами. Ничего не работало, пока я не использовал
header('Content-Type: text/html; charset=ISO-8859-2');
ISO-8859-2 – набор символов для восточно-европейских букв. Поэтому найдите правильный набор символов для своего языка и используйте его в заголовке.