Я получаю данные с разных сайтов через URL. Параметры url кодируются url с помощью функции php urlencode()
, но кодировка символов может быть UTF-8 или Latin-1.
Например, символ é , когда url-encoded из UTF-8 становится% C3% A9, но когда url-кодируется с латинского-1, он становится% E9.
Когда я получаю данные через url, я использую urldecode()
а затем мне нужно знать, что такое кодировка символов, поэтому я в конечном итоге использую utf8_encode
прежде чем вставлять их в базу данных MySQL.
Как ни странно, следующий код не работает:
$x1 = 'Cl%C3%A9ment'; $x2 = 'Cl%E9ment'; echo mb_detect_encoding(urldecode($x1)).' / '.mb_detect_encoding(urldecode($x2));
Он возвращает UTF-8 / UTF-8
Почему это, что я делаю неправильно и как я могу узнать кодировку символов этой строки?
благодаря
mb_detect_encoding()
обычно бесполезен со вторым параметром по умолчанию:
<?php $x1 = 'Cl%C3%A9ment'; $x2 = 'Cl%E9ment'; $encoding_list = array('utf-8', 'iso-8859-1'); var_dump( mb_detect_encoding(urldecode($x1), $encoding_list), mb_detect_encoding(urldecode($x2), $encoding_list) );
… печатает:
string(5) "UTF-8" string(10) "ISO-8859-1"