Как конвертировать любую кодировку символов в UTF8 на PHP - PullRequest
4 голосов
/ 03 июля 2011

Я работаю над веб-сканером, который собирает данные с сайтов по всему миру и работает с разными языками и кодировками.

В настоящее время я использую следующую функцию, и она работает в 99% случаев. Но этот 1% вызывает у меня головную боль.

function convertEncoding($str) {
    return iconv(mb_detect_encoding($str), "UTF-8", $str);
}

Ответы [ 3 ]

8 голосов
/ 03 июля 2011

Вместо того, чтобы слепо пытаться определить кодировку, сначала следует проверить, есть ли на загруженной странице набор символов в списке.Набор символов может быть установлен в заголовке ответа HTTP, например:

Content-Type:text/html; charset=utf-8

или в HTML как метатег, например:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Только если ни один не доступензатем попытайтесь угадать кодировку с помощью mb_detect_encoding () или других методов.

6 голосов
/ 03 июля 2011

Невозможно обнаружить набор символов строки со скоростью 100%, поскольку некоторые наборы символов являются подмножеством некоторых других.Попробуйте установить набор символов явно, если это возможно, без смешивания функций iconv и mbstring .Я рекомендую использовать такую ​​функцию и поставлять из кодировки , когда это возможно:

function convertEncoding($str, $from = 'auto', $to = "UTF-8") {
    if($from == 'auto') $from = mb_detect_encoding($str);
    return mb_convert_encoding ($str , $to, $from); 
}
1 голос
/ 03 июля 2011

Вы можете попробовать utf_encode ($ str).

http://www.php.net/manual/en/function.utf8-encode.php#89789

Или вы можете заменить метатег типа контента на

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

из заголовка просканированного контента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...