tundramani
@tundramani

Как декодировать такой текст?

Обработчик события window.onerror

window.onerror = function(msg, url, line)
	{ 
		alert("ошибка:" + msg + '\n' + decodeURI(url) + ':' + decodeURI(line))
	}


выдает такой текст:

ошибка:ReferenceError: \u0441\u043F\u0438\u0441\u043E\u043A_\u0442\u043E\u0432\u0430\u0440\u043E\u0432 is not defined
http://инÑеÑнеÑ-маг


какой функцией можно декодировать такой текст?
  • Вопрос задан
  • 720 просмотров
Пригласить эксперта
Ответы на вопрос 3
decodeURI('\u0441\u043F\u0438\u0441\u043E\u043A_\u0442\u043E\u0432\u0430\u0440\u043E\u0432');
Ответ написан
Комментировать
Exomode
@Exomode
Архитектор ПО
Это обычный вид кодировщика UTF-8. У вас на клиенте обычно такой текст должен быть сразу в декодированном виде. Если вы хотите, чтобы сервер уже сразу отдавал ответ в корректном виде кириллицы, нужно будет подправить ответ сервера, вот пример того, как можно это сделать:
function response($data = []) {
    header("Content-Type: application/json; charset=utf-8");

    $flags = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_PRETTY_PRINT;

    $fails = implode('|', array_filter([
        '\\\\',
        $flags & JSON_HEX_TAG ? 'u003[CE]' : '',
        $flags & JSON_HEX_AMP ? 'u0026' : '',
        $flags & JSON_HEX_APOS ? 'u0027' : '',
        $flags & JSON_HEX_QUOT ? 'u0022' : '',
    ]));

    $pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/";

    $callback = function ($m) {
        return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8');
    };
    
    echo preg_replace_callback($pattern, $callback, json_encode($data, $flags));
    exit;
}

response([ "data" => "Здесь русские буквы!" ]);
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Например, так:
console.log('ошибка:ReferenceError: \u0441\u043F\u0438\u0441\u043E\u043A_\u0442\u043E\u0432\u0430\u0440\u043E\u0432 is not defined';) 
// ошибка:ReferenceError: список_товаров is not defined
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы