Разница между escape ('html') и escape ('html_attr') в Twig

Начиная с версии 1.9.0, Twig предоставляет html_attr стратегию для escape фильтра (см. документация).

Стратегия html использует функцию PHP htmlspecialchars (это подтверждается беглым просмотром источника). Стратегия html_attr использует серию пользовательских замен, которые, похоже, в конечном итоге дают тот же эффект.

Есть ли разница между двумя стратегиями?


person Laurent Pireyn    schedule 20.08.2012    source источник
comment
Я думаю, что html_attr безопасно для атрибутов без кавычек, тогда как html безопасно для основного текста и в цитируемых атрибутах. Я не смог найти точную ссылку на это, но очень хотел бы ее увидеть.   -  person Rich    schedule 22.11.2016


Ответы (1)


В источнике говорится :

/*
 * While HTML supports far more named entities, the lowest common denominator
 * has become HTML5's XML Serialisation which is restricted to the those named
 * entities that XML supports. Using HTML entities would result in this error:
 *     XML Parsing Error: undefined entity
 */

На практике стратегия html изменяет только символы, имеющие особое значение в HTML, тогда как стратегия html_attr заменяет почти все не буквенно-цифровые символы, включая пробелы. См. Пример:

Видите этот текст, хорошо?

raw:       See this <b>text</b>, OK?
html:      See this &lt;b&gt;text&lt;/b&gt;, OK?
html_attr: See&#x20;this&#x20;&lt;b&gt;text&lt;&#x2F;b&gt;,&#x20;OK&#x3F;

Насколько я понимаю, для HTML можно использовать стратегию html, для документов XML лучше использовать стратегию html_attr, но я не пробовал это на практике.

person Harry Oosterveen    schedule 05.01.2013