Запрет 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">
Другие вопросы по тегам