Понимание того, как работает decodeURI

Я пытаюсь получить декодированное значение для строки. Я замечаю, что decodeURI (я не использую unescape, потому что где-то читал, что он устарел) работает, когда я делаю document.write(), но предупреждение все еще показывает не декодированное значение.

var uri = "Hello's ";
var dec = decodeURI(uri);
alert(dec);
document.write(dec);

Я наконец-то использовал приведенный ниже код и все заработало;

var strName = $('<div/>').html("Hello&#39;s").text();

но все еще задаетесь вопросом, почему оригинальный код не работает? Кажется, это довольно простой вариант использования.

1 ответ

Решение

Похоже, вы неправильно поняли, что decodeURI() функция делает.

В вашем примере uri не содержит никаких закодированных данных URI. alert() все еще показывает объекты HTML, потому что предупреждения Javascript работают только в виде открытого текста. Когда вы используете document.write() браузер интерпретирует переменную и автоматически анализирует HTML-сущность (&#39;).

Например, вот пример вывода с консоли JS на основе вашего первого примера:

> var test = 'Hello&#39;s';
> decodeURI(test);
< "Hello&#39;s"

Вы путаете сущности HTML с символами в кодировке URL. URL-кодированный символ для apostrophe на самом деле %27 (&#39; является сущностью HTML).

Итак, бег decodeURI() с апострофом Юникода, замененным на правильную версию в кодировке URL, получается ожидаемый результат. Например:

> var test = 'Hello%27s';
> decodeURI(test);
< "Hello's"
Другие вопросы по тегам