Кодирование window.location.hash

Можно использовать строковое форматирование стиля C:

"%d:%d:d" % (hours, minutes, seconds)

Посмотрите здесь, особенно: https://web.archive.org/web/20120415173443/http://diveintopython3.ep.io/strings.html

41
задан Josh Lee 27 July 2010 в 10:53
поделиться

4 ответа

К сожалению, это ошибка Firefox, поскольку он декодирует location.hash в дополнительное время при доступе к нему. Например, попробуйте сделать это в Firefox:

location.hash = "#%30";
location.hash === "#0"; // This is wrong, it should be "#%30"

Единственное кроссбраузерное решение - просто использовать (location.href.split ("#") [1] || "") вместо хэш. Установка хэша с использованием location.hash , похоже, работает правильно для всех браузеров, которые поддерживают location.hash .

38
ответ дан 27 November 2019 в 00:52
поделиться

Отвечая на мой вопрос, мое текущее решение - проанализировать window.location.href вместо использования window.location.hash , потому что первый всегда (т.е. в каждом браузере) закодирован по URL. Поэтому предлагаемую функцию decodeURIComponent CMS всегда можно безопасно использовать. YUI делает то же самое, поэтому это не может быть так неправильно ...

6
ответ дан 27 November 2019 в 00:52
поделиться

Вы можете использовать decodeURIComponent , он вернет # ü во всех случаях:

decodeURIComponent('#%C3%BC'); // #ü
decodeURIComponent('#ü'); // #ü

Попробуйте здесь .

4
ответ дан 27 November 2019 в 00:52
поделиться

На самом деле в моей версии Firefox (3.5 в Linux), если я набираю «#% C3% BC» в качестве хэша в URL-адресе, сам URL-адрес фактически преобразуется в юникод с "# ü". Но вы, похоже, ответили на свой вопрос - в Firefox браузер преобразует escape-коды сущностей в URL, а в IE - нет.

Мой совет на самом деле таков: вместо того, чтобы помещать "#% C3% BC" "в URL-адресе, просто используйте полный код Unicode в своих хэшах и URL-адресах. Это вариант? Он должен нормально работать в любом современном браузере.

0
ответ дан 27 November 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: