Проблема кодировки символов с PHP Простой HTML DOM Parser

Я использую 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 в веб-приложении ), и это также стоит прочитать. Понимание кодировки

Прочитав ваши комментарии, ответьте и, конечно, эти две статьи, я, наконец, решил свою проблему.

Я перечислил шаги, которые я сделал до сих пор, чтобы решить эту проблему:

  1. Добавлен header('Content-Type: text/html; charset=utf-8'); в верхней части моего файла init.php,
  2. Изменен CHARACTER SET поля моей базы данных базы данных, которое сохраняет эти значения в UTF-8,
  3. Установите кодировку MySQL для подключения к UTF-8 mysql_set_charset('utf8', $connection_link_id);
  4. Используемая функция htmlentities () для преобразования символов $meta_title = htmlentities(trim($meta_title_raw), ENT_QUOTES, 'UTF-8');

Теперь вопрос, похоже, решен, НО мне все же нужно сделать следующее, чтобы решить эту проблему в ПОЛНОМ.

  1. Получить кодированную кодировку из источника $source_charset .
  2. Измените кодировку строки в UTF-8, если она уже не в той же кодировке. Для этого единственной доступной функцией PHP является 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 – набор символов для восточно-европейских букв. Поэтому найдите правильный набор символов для своего языка и используйте его в заголовке.