2013-03-12 30 views
8

我使用PHP的整潔乾淨用戶生成的,包含一個樣式標記HTML頁面:防止PHP整潔的風格標籤數據轉換爲CDATA

<style type="text/css"> 
    body { 
     padding-top: 60px; 
     padding-bottom: 40px; 
    } 
</style> 

但是,一旦我運行整齊,風格標籤數據轉換爲CData。 我使用Tidy的主要目的是修復文件以及做適當的縮進。

<style type="text/css"> 
/*<![CDATA[*/ 
    body { 
      padding-top: 60px; 
      padding-bottom: 40px; 
    } 
/*]]>*/ 
</style> 

我整理的配置選項 -

$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的整潔庫不完全是「有據可查」一個! 因此,在整理清理/修復代碼後,需要手動刪除CDATA。

$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選項。 CDATA包裝對於XHTML是必需的,因爲CSS可以包含未轉義的>字符。

+0

ahhhh我不敢相信我那樣做......在這一個上花費數小時!非常感謝:) – 2013-03-13 06:56:29

+0

截至今天,OP應該*既*去激活['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 Tidy for Linux version 5.4.0 '測試過)。 – 2017-04-20 05:32:30

0

處理它的一種方法是使用指向外部樣式表的鏈接。

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

正如我所提到的,頁面是用戶生成的東西,所以我一直在尋找一個解決方案,可以防止cdata標籤的創建..移動到外部樣式表顯然是一種選擇,但我希望它是最後的手段。 .. – 2013-03-12 20:25:40

1

添加CDATA標籤的目的是幫助瀏覽器知道自己應該解析的字符,如「<」和「&」爲文字字符,而不是HTML語法。整潔似乎沒有任何記錄的配置,可以防止爲內聯css/javascript生成它們。唯一的選擇是將CSS移動到一個單獨的文件。在這種情況下,它不需要CDATA標籤。

參見http://tidy.sourceforge.net/docs/quickref.htmlhttps://en.wikipedia.org/wiki/CDATA瞭解更多信息。

+0

是啊我知道什麼CDATA是用於,我唯一擔心的是,它不是很有用的內部風格標籤,瀏覽器是足夠聰明的解碼,並適當使用它...所以有辦法避免這個「不必要」的插件! – 2013-03-12 20:27:50