Понимание того, как работает decodeURI
Я пытаюсь получить декодированное значение для строки. Я замечаю, что decodeURI (я не использую unescape, потому что где-то читал, что он устарел) работает, когда я делаю document.write(), но предупреждение все еще показывает не декодированное значение.
var uri = "Hello's ";
var dec = decodeURI(uri);
alert(dec);
document.write(dec);
Я наконец-то использовал приведенный ниже код и все заработало;
var strName = $('<div/>').html("Hello's").text();
но все еще задаетесь вопросом, почему оригинальный код не работает? Кажется, это довольно простой вариант использования.
1 ответ
Похоже, вы неправильно поняли, что decodeURI()
функция делает.
В вашем примере uri
не содержит никаких закодированных данных URI. alert()
все еще показывает объекты HTML, потому что предупреждения Javascript работают только в виде открытого текста. Когда вы используете document.write()
браузер интерпретирует переменную и автоматически анализирует HTML-сущность ('
).
Например, вот пример вывода с консоли JS на основе вашего первого примера:
> var test = 'Hello's';
> decodeURI(test);
< "Hello's"
Вы путаете сущности HTML с символами в кодировке URL. URL-кодированный символ для apostrophe
на самом деле %27
('
является сущностью HTML).
Итак, бег decodeURI()
с апострофом Юникода, замененным на правильную версию в кодировке URL, получается ожидаемый результат. Например:
> var test = 'Hello%27s';
> decodeURI(test);
< "Hello's"