2013-03-12 2 views
8

Я использую PHP аккуратного, чтобы очистить пользовательский HTML-страницу, которая содержит тег стиля:Предотвращение PHP Tidy от преобразования данных типа тегов в CDATA

<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); 

Я попытался найти много но Tidy библиотеку PHP не совсем «хорошо документирован» один! Таким образом, он спустился на удаление 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 на странице!

Большое спасибо!

ответ

7

Отключить опцию output-xhtml. Для XHTML требуется обтекание CDATA, поскольку CSS может содержать неэкономленные символы >.

+0

ahhhh Я не могу поверить, что я сделал это ... часами на этом! Большое спасибо :) –

+0

На сегодняшний день OP должен * both * деактивировать ['output-xhtml'] (http://tidy.sourceforge.net/docs/quickref.html#output-xhtml) ** и ** активировать ['output-html'] (http://tidy.sourceforge.net/docs/quickref.html#output-html), т. е. имеет' 'output-xhtml '=> false' и'' output-html '= > true' (проверено с помощью HTML HTML Tidy для Linux версии 5.4.0 '). –

0

Один из способов обработки - использовать ссылку на внешнюю таблицу стилей.

<link rel="stylesheet" type="text/css" media="screen, print" href="site.css"> 
+0

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

1

Добавление тегов CDATA предназначен, чтобы помочь браузеру знать, что они должны разобрать символы, такие как «<» и «» & как буквенных символов вместо HTML синтаксиса. У Tidy, похоже, нет какой-либо документированной конфигурации, которая предотвратила бы их создание для встроенного css/javascript. Единственный вариант - переместить css в отдельный файл. В этом случае ему не нужен тег CDATA.

см. http://tidy.sourceforge.net/docs/quickref.html и https://en.wikipedia.org/wiki/CDATA для получения дополнительной информации.

+0

Да, я знаю, для чего используется CDATA, моя единственная забота заключается в том, что он не очень полезен внутри тега стиля, браузер достаточно умен, чтобы декодировать его и использовать его соответствующим образом ... так что есть способ избегайте этого «лишнего» аддона! –

Смежные вопросы