Проверьте строку, является ли UTF-8 или UCS-2 - PullRequest
1 голос
/ 19 января 2012

Если у меня есть список данных:

$a = "hello";

$b= "4f60";

$c = "hi";

$d = "00480065006C006C006F";

$ b и $ d - строка UCS-2. Я хочу отобразить все эти данные в таблице, так как я могу узнать, какие данные являются UCS-2, чтобы я мог преобразовать их перед отображением? Является ли это возможным ? Я пробовал mb_detect_encoding и preg_match для юникода, найденного на php.net, но даже это неизвестный символ, который он все еще рассматривал как юникод.

Спасибо.

1 Ответ

4 голосов
/ 19 января 2012

Прежде всего, отображаемые вами строки представляют собой шестнадцатеричные представления, а не фактические кодировки UCS-2 или UTF-8.

Тем не менее, между UCS-2 и UTF-8 есть довольно большие различия, которые позволили бы вам написать код, который корректно обнаруживает кодировку с действительно высоким уровнем успеха , Но перед этим покажите нам, как вы используете mb_detect_encoding, и это не работает. Нет смысла изобретать колесо еще хуже, чем уже существует.

Обновление: Ваши входные строки на самом деле не являются закодированными значениями байтов; они шестнадцатеричные представления значений. Чтобы отменить это, вы можете использовать

$proper_string = pack('H*', $hex_encoded_string);

После этого mb_detect_encoding должно работать нормально.

...