понимание того, как работает 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();

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


person noi.m    schedule 19.03.2015    source источник


Ответы (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() с заменой апострофа unicode на правильную версию в кодировке URL дает ожидаемый результат. Например:

> var test = 'Hello%27s';
> decodeURI(test);
< "Hello's"
person BenM    schedule 20.03.2015
comment
Спасибо. Кажется, что нет никакого собственного метода java-script для декодирования объектов HTML, поэтому я думаю, что способ jquery в порядке. - person noi.m; 20.03.2015