innerHTML и C% 23 (C #) в ссылках - Firefox - PullRequest
1 голос
/ 05 марта 2009

If you set the innerHTML of a <div> to innerHTML = '<a href="Something/C%23">C#</a><br />';

То, что на самом деле кажется «обработанным», выглядит так:

<div>
<a href="Something/C#">C#</a><br />
</div> 

Как правильно избежать этого, чтобы ссылка оставалась "Something / C% 23"?

UPDATE
Я заметил странную мелочь здесь. Если вы используете функцию для создания ссылки. Дополнительный выход% 25 не требуется. Weird.
ех.

function buildLink(tg, nm) {
  return '<a href="Something/' + tg + '">' + nm + '</a><br />';
}

Ответы [ 4 ]

3 голосов
/ 05 марта 2009

Стоит отметить, что многие браузеры отображают ссылку на "Something/C%23" как "Something/C#" как "дружественный" URL. Проверьте div с помощью Firebug или аналогичного инструмента, чтобы убедиться, что он на самом деле установлен неправильно.

Если это так, то вам нужно экранировать знак процента как %25:

innerHTML = '<a href="Something/C%2523">C#</a><br />';
2 голосов
/ 05 марта 2009

Попробуйте это:

<a href="Something/C%2523">C#</a><br />

Разверните "%" до "%25", и вы получите то, что хотите. Затем «%25» преобразуется обратно в символ процента, а последующий 23 не интерпретируется повторно.

0 голосов
/ 05 марта 2009

То, что на самом деле кажется «обработанным», выглядит так:

<a href="Something/C#">C#</a><br />

Неа. Если вы наведите курсор мыши на ссылку, Firefox сообщит вам в строке состояния, что ссылка идет на «C #», но она врет. На самом деле нажмите на ссылку, и в результате вы получите «C% 23» (оно появится прямо в адресной строке).

Как правильно избежать этого, чтобы ссылка оставалась "Something / C% 23"?

Вы правильно поняли в первый раз. «Something / C% 2523» закодировано слишком много.

Я заметил странную мелочь здесь. Если вы используете функцию для создания ссылки. Дополнительный выход% 25 не требуется.

Нахождение в функции или нет, не влияет на нее. будет влиять на него и может вас здесь смущать, если вы используете адресную строку для ввода javascript: URL-адресов в качестве механизма тестирования. javascript: URL-адреса по-прежнему являются URL-адресами, и любое% -кодирование в них будет отменено за один шаг до того, как интерпретатор JS увидит код. Если бы вы использовали экранирование строкового литерала JS, вы бы не столкнулись с этой проблемой:

javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')
0 голосов
/ 05 марта 2009

Избегайте самого процента, и вы должны его получить.

innerHTML = '<a href="Something/C%2523">C#</a><br />';
...