Появились символы \u041e\u043a\u0440\u0448
2 января 2023
Символы в формате \uXXXX являются представлением Юникода в формате экранированной последовательности. Другими словами, это escape-последовательности кодировки Unicode. Преобразование происходит в местах, где не разрешено использовать символы за пределами набора ASСII. Например, кириллица не входит в этот набор, поэтому экранируется в последовательность \uXXXX.
Наиболее часто разработчики сталкивались с такими символами в функции json_encode, которая используется для кодирования массива в формат JSON. До версии PHP 5.4 все не ASCII символы преобразовались в экранированные последовательности Юникода. Начиная с версии PHP 5.4 у функции появилась опциональная константа JSON_UNESCAPED_UNICODE, которая отключает кодирование многобайтовых Unicode-символовов.
В силу разных причин до сих пор существуют приложения и сайты, которые используют младшие версии PHP, но символы необходимо не экранировать (например, для передачи в API Вконтакта). Избежать экранирования можно с помощью обработки, которая после json_encode расшифровывает символы \uXXXX:
* код функции был позаимствован и слегка доработан
Наиболее часто разработчики сталкивались с такими символами в функции json_encode, которая используется для кодирования массива в формат JSON. До версии PHP 5.4 все не ASCII символы преобразовались в экранированные последовательности Юникода. Начиная с версии PHP 5.4 у функции появилась опциональная константа JSON_UNESCAPED_UNICODE, которая отключает кодирование многобайтовых Unicode-символовов.
В силу разных причин до сих пор существуют приложения и сайты, которые используют младшие версии PHP, но символы необходимо не экранировать (например, для передачи в API Вконтакта). Избежать экранирования можно с помощью обработки, которая после json_encode расшифровывает символы \uXXXX:
$enc_params = json_encode($data);
$enc_params = preg_replace_callback('/(?<!\\\\)\\\\u(\w{4})/', function ($matches) {
return html_entity_decode('' . $matches[1] . ';', ENT_COMPAT, 'UTF-8');
}, $enc_params);
* код функции был позаимствован и слегка доработан