2010-08-25 3 views
14

Теперь я разрабатываю веб-сайты и интерфейсы XML с 7 лет, и никогда не приходил в ситуацию, когда было действительно необходимо использовать &gt; для >. До сих пор можно было бы устранить все несоответствия, указав только <, &, " и '.Есть > когда-нибудь необходимо?

Был ли кто-нибудь когда-либо в ситуации (связанной с обработкой SGML, проблемами с браузером, XSLT, ...), где вы обнаружили невозможность избежать знака большего размера с помощью &gt;?

Update: Я только что проверил с XML spec, где он говорит, например, о символьных данных в разделе 2.4:

Характер данных

[14]  CharData  ::=  [^<&]* - ([^<&]* ']]>' [^<&]*) 

Так что даже там, > не упоминается как нечто особенное, за исключением конечной последовательности раздела CDATA.

Это один единственный случай, когда > имеет какое-либо значение, было бы окончание раздела CDATA, ]]>, но опять же, если бы вы процитировать, цитата (т.е. символьная строка ]]&gt;) будет земля буквально на выходе (так как это CDATA).

+4

Может быть, я не понимаю, но это помогает предотвратить инъекции HTML/JS. Также его требуется, если ваш результат html должен быть xhtml удовлетворительным. – Nate

+4

Я думаю, что это больше для симметрии с '' < '', чем что-либо еще. –

+1

Вам никогда не понадобилось, потому что браузеры не похожи на компиляторы, они слишком разрешительны/прощают, следовательно, не знают стандарты в Интернете. Вы не избегаете «» в строке JavaScript? ('var test = 'Я расскажу';') Это то же самое. –

ответ

7

Вам не нужно абсолютно, потому что почти любой интерпретатор XML поймет, что вы имеете в виду. Но все же вы используете специальный символ без какой-либо защиты, если вы это сделаете.

XML - это все о семантике, и это не очень смысловое соответствие.

Об обновления, вы забыли эту часть:

Правая угловая скобка (>) может быть представлена ​​с помощью строки «>», и должны, для совместимости, экранировать с помощью либо "&gt; "или ссылку на символ, когда она появляется в строке" ]]> "в содержании, когда эта строка не отмечает конец раздела CDATA.

Прецедент в документации больше о чем-то вроде этого:

<xmlmarkup> 
]]> 
</xmlmarkup> 

Здесь ]]> часть может быть проблема со старыми анализаторами SGML, поэтому должен быть экранированы в = ]]&gt; по соображениям совместимости.

+1

Как насчет * почти * части? Есть ли какие-нибудь, которые получают hickup из unquoted '>'? – Boldewyn

+1

Ну, если кто-нибудь написал XML-парсер, который соблюдает только стандарты XML, это может случиться. Я не знаю парсер, который мог бы иметь такое поведение, но это не было его ошибкой или проблемой. –

+0

Парсер XML, который соблюдает стандарты XML, ДОЛЖЕН принимать неуказанные '>'. Я думаю, что параграф, который вы цитируете, относится к совместимости с несоответствующими анализаторами или, может быть, к более старой (черновиковой) версии спецификации. – Daniel

3

Не так много, как автор (x) html документов, но больше как пользователь неаккуратных письменных комментариев полей на сайтах, которые «предлагают» вам вставить html.

Я имею в виду, если вы сделаете свой сайт правильным путем, вы бы не стали жестко кодировать свой контент в любом случае, верно? Таким образом, ваш звонок в htmlentities или что-то еще (долгое время нет, php) позаботится о замене специальных символов для вас. Так что, вы не будете вручную вводить &gt;, но я надеюсь, что вы предпримете меры, так что > автоматически заменяется.

3

Я использовал one not 19 hours назад, чтобы передать строгую проверку xml. Другое дело, когда вы используете их на самом деле в тексте контента html/xml (а не на атрибутах), например: <.

Несомненно, слабый парсер будет принимать все, что вы на него набросите, но если вы когда-либо беспокоились о XSS, & lt; твой друг.

Update: Вот пример, где вам нужно бежать > в Firefox:

<?xml version="1.0" encoding="utf-8" ?> 
<test> 
    ]]> 
</test> 

Конечно, это еще не является примером того, чтобы избежать одинокого >.

+0

На самом деле, работал бы ваш ссылочный пример, если вы * только * избежали '<'? Это точно мое дело. А если нет, то парсер неправильно, или я пропустил это место в спецификации XML? http://w3.org/TR/xml/#NT-AttValue – Boldewyn

+0

ОК, теперь я вижу точку, к которой вы пытаетесь добраться. Обновлен пост с примером, который дает ошибки в анализе в Firefox, но будет анализировать, если вам никогда не нужно бежать>. – Douglas

+1

Да, теперь мы думаем одинаково. Колин и я тоже нашли это. Похоже, что, по крайней мере, в «XML-части SGML» -world, это единственный пример, где '>' имеет смысл. – Boldewyn

0

Я просто подумал, что другой пример, где вам нужно процитировать > в HTML5 (не XHTML5) документы: Если вам это нужно в атрибутах без кавычек (что-то, что можно утверждать, конечно).

<img src=arrow.png alt=&gt;> 

должно быть эквивалентно XHTML

<img src="arrow.png" alt=">" /> 

Но опять же, (? <! X) HTML не SGML.

0

Представьте, что у вас есть следующий текст this is a not a ]]> nice day, и вы решили окружить его секциями CDATA <![CDATA[this is a not a ]]> nice day]]>.

Для того чтобы избежать этого (и для обеспечения возможности синтаксического анализа фрагментов SGML с несоединением отмеченных секциями) пункт 10.4 ISO 8879: 1986 заявляет, что возникновение ]]> вне отмеченного раздела ошибки.

Кроме того, во времена отмеченных разделов SGML были очень популярны, поскольку они использовались не только для CDATA (как в XML), но и для RCDATA (разрешены только сущности и символьные ссылки) и IGNORE и INCLUDE (что позволило для распознавания разметки внутри них).

Например, в SGML можно было бы написать:

<!ENTITY %WHATTODO "INCLUDE"> 
<![%WHATTODO;[<b>]]&gt;</b>]]> 

Что эквивалентно:

<b>]]&gt;</b>