Razor XHTML "&" Ошибка кодировки символов - PullRequest
1 голос
/ 17 января 2011

Мне нравится этот новый механизм просмотра, и одна из самых классных функций - все закодировано по умолчанию. но есть кое-что, чего я не понимаю, допустим, я создал этот абзац HTML

<p>
       this is a test Paragraph for both Development & Production
</p>

Теперь, если я проверяю элемент в firebug, я получаю

<p>
  this is a test Paragraph for both Development  &amp; Production   
</p>

, что правильно, но если я просматриваю исходный код в браузере я получаю

<p>
  this is a test Paragraph for both Development  & Production   
</p>

и я пытаюсь проверить страницу с проверкой W3C, я получаю сообщение об ошибке символа "&" как недействительное.

Теперь мой документ выглядит так, как я считаю правильно

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11     /DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

Что мне не хватает?

Ответы [ 3 ]

11 голосов
/ 17 января 2011

По умолчанию Razor будет кодировать все, что пишет, а не все на странице. Поскольку Razor воспринимает текст внутри тегов P как HTML, он не будет кодировать его.

Посмотрите на следующий пример, чтобы лучше понять разницу:

<p>this is a test Paragraph for both Development & Production</p>

@{var body = "this is a test Paragraph for both Development & Production";}
<p>@body</p>

@{var body2 = new HtmlString("this is a test Paragraph for both Development & Production");}
<p>@body2</p>

Если вы отобразите эту страницу, вы заметите, что первый абзац не закодирован, тогда как второй абзац будет закодирован, поскольку он кодирует выходные данные переменной. Затем третий пример выдаст тот же вывод, что и первый, так как он использует специальную строку HtmlString, которая предполагает, что ввод безопасен.

Для справки, вот вывод из Razor:

<p>this is a test Paragraph for both Development & Production</p>
<p>this is a test Paragraph for both Development &amp; Production</p>
<p>this is a test Paragraph for both Development & Production</p>
3 голосов
/ 17 января 2011

Razor будет избегать вывода только из @ блоков.

Вам по-прежнему необходимо экранировать буквальную разметку самостоятельно.
Firebug показывает &amp;, потому что браузер достаточно умен, чтобы правильно интерпретировать неверную разметку.

0 голосов
/ 17 января 2011

Firebug автоматически кодирует некоторые вещи HTML, когда отображает их в программе просмотра Это вводит в заблуждение. Просмотр источника показывает, что на самом деле выводит ваш сайт.

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