Передача

#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