Запрет PHP Tidy от преобразования данных тегов стиля в CDATA
Я использую php tidy для очистки созданной пользователем HTML-страницы, которая содержит тег стиля:
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
</style>
Но как только я запускаю Tidy, данные тега стиля преобразуются в CData. Моя основная цель использования Tidy - восстановить файл и сделать правильные отступы.
<style type="text/css">
/*<![CDATA[*/
body {
padding-top: 60px;
padding-bottom: 40px;
}
/*]]>*/
</style>
Мои параметры конфигурации Tidy:
$options = array(
'preserve-entities' => true,
'hide-comments' => true,
'tidy-mark' => false,
'indent' => true,
'indent-spaces' => 4,
'new-blocklevel-tags' => 'article,header,footer,section,nav',
'new-inline-tags' => 'video,audio,canvas,ruby,rt,rp',
'doctype' => 'omit',
'sort-attributes' => 'alpha',
'vertical-space' => false,
'output-xhtml' => true,
'wrap' => 180,
'wrap-attributes' => false,
'break-before-br' => false,
'vertical-space' => false,
);
$buffer = tidy_parse_string($buffer, $options, 'utf8');
tidy_clean_repair($buffer);
Я много пробовал искать, но библиотека PHP Tidy не совсем хорошо документирована! Так что дело дошло до удаления CDATA вручную после того, как Tidy очищает / восстанавливает код.
$buffer = str_replace("/*<![CDATA[*/","",$buffer);
$buffer = str_replace("/*]]>*/","",$buffer);
Теперь моя проблема с этим подходом состоит в том, что отступ данных тега стиля все еще облажался (не точно выровнен с остальной частью страницы)
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
</style>
Итак, еще раз, как я могу предотвратить создание TIDY CDATA на странице!
Большое спасибо!
3 ответа
Выключить output-xhtml
вариант. Обтекание CDATA требуется для XHTML, так как CSS может содержать неэкранированный >
персонажи.
Добавление тегов CDATA предназначено для того, чтобы помочь браузеру понять, что они должны анализировать такие символы, как "<" и "&", как буквенные символы вместо синтаксиса html. У Tidy, похоже, нет документированной конфигурации, которая помешала бы генерировать их для встроенного css / javascript. Единственным вариантом будет перемещение CSS в отдельный файл. В этом случае ему не нужен тег CDATA.
см. http://tidy.sourceforge.net/docs/quickref.html и https://en.wikipedia.org/wiki/CDATA для получения дополнительной информации.
Один из способов справиться с этим - использовать ссылку на внешнюю таблицу стилей.
<link rel="stylesheet" type="text/css" media="screen, print" href="site.css">