html рендеринг неэкранированных символов как экранированных - PullRequest
1 голос
/ 28 марта 2012

Я отображаю эту строку кода в теге <pre> для отображения на экране в виде обычного текста:

<img src="http://maps.googleapis.com/maps/api/staticmap?zoom=7&size=700x540&sensor=false$center=London, England&markers=London, England|Leicester, England|">

, однако в нескольких браузерах она ошибочно отображается как:

<img src="http://maps.googleapis.com/maps/api/staticmap?zoom=7&size=700x540&sensor=false¢er=London, England&markers=London, England|Leicester, England|">

Поскольку escape-код для символа цента &cent;, а не &cent, я не могу понять, почему это происходит, и, похоже, нет способа предотвратить это.Кто-нибудь может помочь?

Кроме того, мой тип документа:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Если это имеет какое-то значение, эта строка кода добавляется в документ с помощью метода innerHTML Javascript.

1 Ответ

1 голос
/ 28 марта 2012

То, что что-то находится в <pre>, не означает, что вам не нужно избегать этого (тип документа здесь не имеет значения). Любой экземпляр & должен использовать объект &amp;, если вы хотите, чтобы & отображалось на экране. Иногда вы можете обойтись без этого, но браузер простит - вы не должны этим пользоваться. Браузер может попытаться преобразовать в объект, если он его распознает, даже если точка с запятой отсутствует (снова прощаем).

Все (источник) должно быть:

&lt;img src=&quot;http://maps.googleapis.com/maps/api/staticmap?zoom=7&amp;size=700x540&amp;sensor=false&amp;center=London, England&amp;markers=London, England|Leicester, England|&quot;&gt;

Кстати, это верно и для значений атрибутов, например href. Обычно люди "ленивы" и не выходят за пределы амперсандов в строках запросов, но вы действительно должны это делать.

...