innerHTML и C%23 (C #) в привязанных hrefs - Firefox
-
03-07-2019 - |
Вопрос
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" ?
Обновить:
Я заметил здесь одну странную маленькую вещь.Если вы используете функцию для создания ссылки.Дополнительное экранирование на 25% не требуется.Странно.
бывший.
function buildLink(tg, nm) {
return '<a href="Something/' + tg + '">' + nm + '</a><br />';
}
Решение
Попробуй это:
<a href="Something/C%2523">C#</a><br />
Расширьте "%
" чтобы "%25
" и ты получишь то, что хочешь.Затем "%25
" преобразуется обратно в символ процента и последующее 23
не переосмысливается по-новому.
Другие советы
Стоит отметить, что многие браузеры будут отображать ссылку на "Something/C%23
" как "Something/C#
" в качестве "дружественного" URL-адреса.Проверьте свой div
используйте Firebug или аналогичный инструмент, чтобы убедиться, что он действительно установлен неправильно.
Если это так, то вам нужно экранировать знак процента как %25
:
innerHTML = '<a href="Something/C%2523">C#</a><br />';
Избавьтесь от самого процента, и он у вас должен быть.
innerHTML = '<a href="Something/C%2523">C#</a><br />';
То, что, кажется, на самом деле "визуализируется", это:
<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>')