Правильные типы сущностей для XHTML, XML и внутри inline JavaScript
-
20-09-2019 - |
Вопрос
Во -первых, как я это понимаю, более уместно использовать числовые объекты в документе XHTML, например, как "
вместо "
, это правильно?
Во -вторых, для моего RSS XML -канала, какой тип сущности правильный? Назван или числовый? Я считаю, что это числовое, но см. Примеры обоих в моих поисках.
В -третьих, что из следующего является правильным для сущностей внутри встроенного 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( '<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>
РЕДАКТИРОВАТЬ 1:
Отличные ответы ниже, но, возможно, я должен был сформулировать мой вопрос по -разному.
Несмотря на вопрос о JavaScript, который вы бы использовали для своего веб -сайта и RSS -канала:
(1) Все числовые сущности, (2) все названные сущности, (3) смесь обоих: & " < >
, с остальными численными.
Я склоняюсь к 3, потому что у моего сайта уже есть & " < > '
глубоко встроенный, плюс htmlspecialchars()
Используется в нескольких местах.
РЕДАКТИРОВАТЬ 2:
Все хорошие ответы ниже, ребята. К сожалению, пришлось выбрать только один.
Решение
Во -первых, как я это понимаю, более уместно использовать числовые объекты в документе XHTML, например, как
"
вместо"
, это правильно?
"
также определяется для XHTML. Таким образом, вы можете использовать оба.
Во -вторых, для моего RSS XML -канала, какой тип сущности правильный? Назван или числовый? Я считаю, что это числовое, но см. Примеры обоих в моих поисках.
Опять таки, "
также определяется для XML. Таким образом, вы можете использовать оба.
В -третьих, что из следующего является правильным для сущностей внутри встроенного JavaScript?
Второй правильный, так как простая <
не допускается внутри объявления значения атрибута (но >
является).
РедактироватьТеперь, когда вы уточнили свой вопрос:
Я бы использовал charset, который содержит все символы, которые мне нужны. Поэтому, если вы хотите иметь возможность использовать практически любой символ, используйте Unicode и кодируйте символы с UTF-8.
Таким образом, вы можете кодировать любого символа с UTF-8 напрямую и не нужно использовать ссылки на символы для символов, отличных от специальных символов XML (по крайней мере, &
, >
, "
а также '
).
И здесь у вас есть свободный выбор между названными или числовыми ссылками на символ. Используйте то, что вам нравится лучше или что использует/предпочитает ваш язык программирования.
Другие советы
Во -первых, как я это понимаю, более уместно использовать числовые объекты в документе XHTML, например, «вместо», верно ли это?
Не совсем.
Есть две проблемы, о которых нужно беспокоиться.
Будет ли это простым старым XHTML или это будет совместимо с HTML xhtml?
Здесь нет '
IS HTML, поэтому вы не можете использовать его в HTML -совместимой XHTML (но вам нужно только использовать его в значениях атрибутов, разграниченных AN, так что просто используйте »вместо этого.
Будет ли это обрабатываться с помощью анализатора XML, который не знает DTD?
Если это так, то будут распознаны только общие XML объекты (quot, apos, gt, lt, amp).
С другой стороны, названные объекты гораздо более читаемы. Настоящие символы (например, через UTF-8) наиболее читаемы.
Во -вторых, для моего RSS XML -канала, какой тип сущности правильный?
Используйте quot, gt, lt, amp, где это необходимо и реальные символы в другом месте.
В -третьих, что из следующего является правильным для сущностей внутри встроенного JavaScript?
Лучше использовать НЕВЕДНЕНИЕ JS вместо внутренних атрибутов события.
Тем не менее, правила такие же, как и у любого другого атрибута HTML - только &
И любой персонаж, который вы использовали для разграничения значения атрибута, должен быть представлен с помощью объекта.
- <, & а также " в значениях атрибута, где
"
Разделитель: используйте<
,&
а также"
, соответственно.
Это предопределенные объекты в XML, поэтому будут работать с любым анализатором независимо от того, читает ли он тип документа. Они также являются нормальными, определенными сущностями в HTML.
Числовые ссылки на символы так же действительны, но немного сложнее читать.
- > В текстовом контенте: используйте
>
или оставить как -is.
>
Обычно не нужно сбежать, он всегда является совершенно законным в значении атрибута, и он является законным в текстовом содержании, если он не является частью ]]>
последовательность. (Это неясная, бессмысленная и иногда подписная часть XML-спецификации.) Вы можете всегда избегать его в текстовом контенте, просто чтобы быть в безопасности и не запомнить это правило. (Это то, что делает канонический XML.)
Числовые ссылки на символы так же действительны, но немного сложнее читать.
- ' в значениях атрибута, где
'
Разделитель: используйте'
.
Числовая ссылка на символ здесь наиболее правильная, потому что XML предопределенная сущность '
Технически не определяется стандартом HTML4 (даже если он будет работать во всех современных браузерах). Опоздание с добавлением этой сущности отражает общую практику всегда использования "
Как значения атрибута.
- не ASCII персонажи: включить как есть
Пока вы используете и объявляете UTF-8, вы можете просто выплюнуть персонажей прямо. Меньшие, более читаемые результаты.
- не ASCII символы (без Unicode): используйте цифровую ссылку на символ
Если по какой-то причине вы не можете использовать UTF-8 (boooo !!!), используйте ссылку на символ, например é
в предпочтении HTML сущностей. HTML -сущности в любом случае охватывают только очень небольшую часть набора символов Unicode; Можно также использовать их для всех IMO. Я лично предпочитаю использовать &#x...
Гекс-эскапии для персонажей, не относящихся к ASCII, так как традиционно относится к символам Unicode их шестигранным кодом «U+XXXX».
Хотя использование HTML -сущностей вполне достоверно в документе XHTML, это означает, что анализатор должен получить внешние объекты, такие как DTD, чтобы выяснить, каковы объекты. Если вы придерживаетесь предопределенных сущностей и ссылок на символы, вы можете использовать легкий неэксперт-фактор, не включающий XML-анализатор XML, не теряя способности найти текстовые, в том числе и ссылаются на ссылки в документе.
Ситуация с RSS мрачна, как обычно со всеми различными версиями RSS, скрывающимися. RSS 0,91 имел DTD, который включал в себя более старые объекты HTML 3.2 Standard, но предыдущий официальный системный URL для DTD стал ходьями. (В надоедливой и ненужной части интернет -вандализма владельцы Netscape, AOL, сломали ссылку в переоборудовании несколько лет назад. Не только это, но и 302 вам на своей домашней странице, если вы попытаетесь получить к нему или любой другой адрес на Старый сайт, обслуживая, с помощью плохо написанной HTML-страницы клиентам, ожидающим DTD. Bad AOL, 302-404 настолько фиктивны.)
RSS 2.0 вообще не имеет официального DTD. Поэтому в любом случае избегайте HTML -сущностей, используя предопределенные объекты и числовые ссылки на символ в предпочтениях.
onmouseover="tooltip_on( '<strong>Tool...
Не допустимо ни в одном типе документа. <
недействителен в значении атрибута.
onmouseover="tooltip_on( '<strong>Tooltip...
Действительный, но нечитаемый. Я второе ненавязчивое предложение Javascript.