#javascript #url #ampersand #html-escape-characters
#javascript #url #амперсанд #html-escape-символы
Вопрос:
У меня есть эта строка кода, которая выполняется при изменении ddl на моей странице —
location.href = '@Url.Action("Edit", "Page", new { UserId = (string)null })/' '@ViewBag.userId' '?status=' '@ViewBag.status' 'amp;amp;pageNo=@ViewBag.PageNo';
Ссылка работала нормально только с amp;, но после проверки средства проверки разметки,http://validator.w3.org/check , он предложил мне заменить amp; на amp;amp
; и я сделал это в приведенной выше строке кода. Однако теперь, когда я меняю ddl, в URL-адресе буквально появляется ddl amp;amp;
, и страница не работает должным образом (как отфильтровано ddl).
<script type="text/javascript">
$(document).ready(function () {
$(".ddl").change(function () { changePage(); });
});
function changePage() {
location.href = '@Url.Action("Edit", "Page", new { UserId = (string)null })/' '@ViewBag.userId' '?status=' '@ViewBag.status' 'amp;amp;pageNo=@ViewBag.PageNo';
}
</script>
Может кто-нибудь сказать мне, что я делаю не так?
Комментарии:
1. Пожалуйста, укажите контекст для этой строки JavaScript. Я предполагаю, что это внутри встроенного элемента скрипта или события. Для URL-адресов вы должны кодировать URL специальными символами, для HTML вы должны кодировать HTML специальными символами
Ответ №1:
Один из самых простых, о которых я могу подумать, заключается в следующем: возможно, вы захотите поместить свой javascript-код во внешний javascript и снова выполнить проверку w3c.
Ответ №2:
Основная проблема заключается в том, что вы используете XHTML, предоставляя его как text/html
Если документ анализировался как XML, то вам нужно было бы представить amp;
as amp;amp;
внутри элемента script, но поскольку вы утверждаете, что документ является HTML, вы не можете этого сделать.
Смотрите рекомендации по совместимости либо
- храните свой JS во внешнем файле
- оберните его маркерами CDATA
- используйте HTML вместо XHTML