Правильные типы сущностей для XHTML, XML и встроенного JavaScript - PullRequest
0 голосов
/ 14 ноября 2009

Во-первых, как я понимаю, более уместно использовать числовые объекты в документе XHTML, например " вместо ", верно?

Во-вторых, для моего RSS-канала какой тип сущности является правильным? Именованный или числовой? Я считаю, что это числовое значение, но я вижу примеры обоих в моих поисках.

В-третьих, что из следующего верно для сущностей внутри встроенного JavaScript?

<span onmouseover="tooltip_on( '<strong>Tooltip inside a span</strong>
<br />Lorem ipsum dolor sit amet.<span>Lorem ipsum <code>dolor sit</code>
amet, consectetur adipisicing elit.</span>' );"
onmouseout="tooltip_off();">tooltip inside a span</span>

ИЛИ ... (теги внутри JS function преобразуются в именованные объекты):

<span onmouseover="tooltip_on( '&lt;strong&gt;Tooltip inside a
span&lt;/strong&gt;&lt;br /&gt;Lorem ipsum dolor sit amet.
&lt;span&gt;Lorem ipsum &lt;code&gt;dolor sit&lt;/code&gt;
amet, consectetur adipisicing elit.&lt;/span&gt;' );"
onmouseout="tooltip_off();">tooltip inside a span</span>

РЕДАКТИРОВАТЬ 1:

Великолепные ответы ниже, но, возможно, мне следовало бы сформулировать свой вопрос по-другому.

Не обращая внимания на вопрос JavaScript, который вы бы использовали для ВАШЕГО сайта и RSS-канала:

(1) Все числовые объекты, (2) все именованные объекты, (3) смесь обоих: &amp; &quot; &lt; &gt;, остальные - числовые.

Я склоняюсь к 3, потому что мой сайт уже имеет глубоко встроенный &amp; &quot; &lt; &gt; &#039;, плюс htmlspecialchars(), используемый во многих местах.

РЕДАКТИРОВАТЬ 2:

Все хорошие ответы ниже, ребята. К сожалению, пришлось выбрать только одну.

Ответы [ 3 ]

0 голосов
/ 14 ноября 2009

Во-первых, как я понимаю, более уместно использовать числовые объекты в документе XHTML, например &#034; вместо &quot;, верно?

&quot; также определено для XHTML. Таким образом, вы можете использовать оба.

Во-вторых, для моего RSS-канала какой тип сущности является правильным? Именованный или числовой? Я считаю, что это числовое значение, но я вижу примеры обоих в моих поисках.

Опять же, &quot; также определен для XML. Так что вы можете использовать оба.

В-третьих, что из следующего верно для сущностей внутри встроенного JavaScript?

Второй является правильным, так как простой < не разрешен в объявлении значения атрибута (но > есть).


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

Я бы использовал кодировку, которая содержит все нужные мне символы. Поэтому, если вы хотите использовать практически любой символ, используйте Unicode и кодируйте символы с помощью UTF-8.

Таким образом, вы можете кодировать любой символ непосредственно с помощью UTF-8 и вам не нужно использовать ссылки на символы для символов, отличных от специальных символов XML (по крайней мере &, >, " и ') .

И здесь у вас есть свободный выбор между именованными или числовыми ссылками на символы. Используйте то, что вам нравится больше или что ваш язык программирования использует / предпочитает.

0 голосов
/ 14 ноября 2009
  • <</kbd>, & и " в значениях атрибутов, где " - разделитель: используйте &lt;, &amp; и &quot;, соответственно.

Это предопределенные объекты в XML, поэтому они будут работать с любым анализатором независимо от того, читает ли он тип документа. Они также являются нормально определенными объектами в HTML.

Числовые ссылки на символы так же действительны, но немного сложнее для чтения.

  • > в текстовом содержимом: используйте &gt; или оставьте как -is.

> обычно не нуждается в экранировании, он абсолютно всегда допустим в значении атрибута и допустим в текстовом содержимом, если он не является частью последовательности ]]>. (Это неясная, бессмысленная и иногда игнорируемая часть спецификации XML.) В любом случае вы можете предпочесть всегда избегать ее в текстовом контенте, просто чтобы быть в безопасности и не запоминать это правило. (Это то, что делает Canonical XML.)

Числовые ссылки на символы так же действительны, но немного сложнее для чтения.

  • ' в значениях атрибутов, где ' - разделитель: используйте &#39;.

Цифровая символьная ссылка является наиболее правильной, поскольку предопределенная сущность XML &apos; технически не определена стандартом HTML4 (даже если она будет работать во всех текущих браузерах). Задержка добавления этой сущности отражает обычную практику всегда использовать " в качестве разделителя значения атрибута.

  • не-ASCII символы: включают как есть

Пока вы используете и объявляете UTF-8, вы можете просто выплевывать символы прямо. Меньшие, более читаемые результаты.

  • не-ASCII-символы (без Unicode): использовать цифровую ссылку на символ

Если по какой-то причине вы не можете использовать UTF-8 (boooo !!!), используйте символьную ссылку, например &#xE9;, в предпочтении к сущностям HTML. В любом случае сущности HTML покрывают очень небольшую часть набора символов Unicode; может также использовать их для всех ИМО. Лично я предпочитаю использовать шестнадцатеричные экранированные символы &#x... для не-ASCII символов, так как принято ссылаться на символы Юникода по их шестнадцатеричному коду "U + xxxx".

Хотя использование сущностей HTML вполне допустимо в документе XHTML, это означает, что анализатор должен извлекать внешние сущности, такие как DTD, чтобы выяснить, что это за сущности. Если вы придерживаетесь предопределенных сущностей и ссылок на символы, вы можете использовать облегченный синтаксический анализатор XML, не включающий внешние сущности, не теряя своей способности находить ссылки на текст, включая сущности в документе.

Ситуация с RSS мрачная, как обычно, со всеми разными версиями RSS. В RSS 0.91 был DTD, который включал сущности более старого стандарта HTML 3.2, но предыдущий официальный системный URL для DTD не использовался. (В назойливой и ненужной части интернет-вандализма владельцы Netscape, AOL, разорвали ссылку в реоре несколько лет назад. Не только это, но и 302 вас на их домашнюю страницу, если вы пытаетесь получить доступ к ней или любому другому адресу старый сайт, таким образом предоставляя плохо написанную HTML-страницу клиентам, ожидающим DTD. Плохой AOL, 302-404-ые настолько поддельные.)

RSS 2.0 вообще не имеет официального DTD. Так или иначе, избегайте сущностей HTML, используя предопределенные сущности и числовые ссылки на символы в предпочтении.

onmouseover="tooltip_on( '<strong>Tool...

Недопустимо в любом типе документа. < недопустимо в значении атрибута.

onmouseover="tooltip_on( '&lt;strong&gt;Tooltip...

Действительный, но нечитаемый. Второе предложение Дэвида о ненавязчивом JavaScript.

0 голосов
/ 14 ноября 2009

Во-первых, как я понимаю, это более целесообразно использовать числовой объекты в документе XHTML, такие как «вместо», это то, что право

Не совсем.

Есть две проблемы, о которых нужно беспокоиться.

Это будет старый XHTML или HTML-совместимый XHTML?

Нет &apos; HTML, поэтому вы не можете использовать его в HTML-совместимом XHTML (но вам нужно использовать его только в значениях атрибутов, ограниченных символом ', так что просто используйте вместо'.

Будет ли это обрабатываться с помощью синтаксического анализатора XML, который не поддерживает DTD?

Если это так, будут распознаваться только общие сущности XML (quot, apos, gt, lt, amp).

С другой стороны, именованные объекты гораздо более читабельны. Реальные символы (например, через UTF-8) наиболее читабельны.

Во-вторых, для моей ленты RSS XML, которая тип сущности правильный?

Используйте quot, gt, lt, amp, где это необходимо, и настоящие символы в других местах.

В-третьих, что из следующего правильно для сущностей внутри строки JavaScript?

Лучше использовать ненавязчивый JS вместо внутренних атрибутов событий.

При этом правила такие же, как и для любого другого атрибута HTML - только &, и любой символ, который вы использовали для разделения значения атрибута, должен быть представлен сущностью.

...