Вопрос

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>')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top