Что такое "n" и как мне его декодировать? - PullRequest
1 голос
/ 14 марта 2010

Итак, у меня есть строка на другом языке, большая часть выглядит великолепно, но ее части закодированы неправильно. Как преобразовать буквенную строку \u0026#39;n в ее эквивалент юникода (?) В PHP?

Ответы [ 3 ]

6 голосов
/ 29 марта 2010

Следующая функция PHP переведет \u0026#39;n в 'n. Это используется для связи с Google Translate API.

function unescapeUTF8EscapeSeq($str) {
    return preg_replace_callback("/\\\u([0-9a-f]{4})/i",
        create_function('$matches',
            'return html_entity_decode(\'&#x\'.$matches[1].\';\', ENT_QUOTES, \'UTF-8\');'
        ), $str);
}
4 голосов
/ 14 марта 2010

Разобрав его, похоже, он прошел как минимум два разных процесса кодирования. Начнем с \u0026 - это кодовая точка Unicode hex 26, или 38 в десятичном виде. Первые 128 кодов Unicode совпадают с ASCII, так что это ASCII 38, амперсанд.

Итак, теперь у нас есть 'n, который выглядит как разрешение HTML или XML для символа 39, то есть символа одинарных кавычек, '.

Дает нам 'n. Что я не вижу, как декодировать дальше - предоставляет ли контекст дополнительные подсказки?

3 голосов
/ 25 января 2019

Чтобы обновить ответ @ rook для использования встроенного обратного вызова, а не устаревшего метода create_function, вы получаете:


                    function unescapeUTF8EscapeSeq($str)
                    {
                        return preg_replace_callback(
                            "/\\\u([0-9a-f]{4})/i",
                            function ($matches) {
                                return html_entity_decode('&#x' . $matches[1] . ';', ENT_QUOTES, 'UTF-8');
                            },
                            $str
                        );
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...