Появились символы \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:
$enc_params = json_encode($data);
$enc_params = preg_replace_callback('/(?<!\\\\)\\\\u(\w{4})/', function ($matches) {
    return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT, 'UTF-8');
}, $enc_params);

* код функции был позаимствован и слегка доработан