2012-05-04 106 views
5

我有一堆使用PHP寫入PDF文件的HTML數據。在PDF中,我希望所有的HTML都被剝離和清理。因此,例如:使用PHP清理HTML以創建乾淨的字符串

<ul> 
    <li>First list item</li> 
    <li>Second list item which is quite a bit longer</li> 
    <li>List item with apostrophe 's 's</li> 
</ul> 

應該改爲:

​​

但是,如果我只是使用strip_tags(),我得到的是這樣的:

First list item&#8232; 

    Second list item which is quite a bit 
longer&#8232; 

    List item with apostrophe &rsquo;s &rsquo;s 

還要注意輸出的壓痕。

關於如何正確地清理HTML的漂亮,乾淨的字符串沒有凌亂的空白和奇怪的字符的任何提示?

謝謝:)

+2

我懷疑'strip_tags()'本身將編碼你的實體。你確定你沒有錯過某個地方對'htmlentities'的調用嗎? – Yoshi

+1

縮進正是我所期望的,PHP正在剝離這些標籤,但不是它們周圍的額外文本。 – scragar

+0

你的意思是我應該*或*不應該*在某處使用htmlentities()?在這一刻我不是。 HTML數據直接來自數據庫。 – Rein

回答

3

您可以使用html_entity_decode strip_tags的結果進行解碼或者使用的preg_replace其刪除:

$text = strip_tags($html_text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 

和您的線條使用ltrim從開頭刪除空格:

$content = join("\n", array_map("ltrim", explode("\n", $content))); 

保留撇號使用此代替:

$text = strip_tags($html_text); 
$text = str_replace("&rsquo;","'", $text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 
+0

太棒了!差不多了。唯一的事情是撇號現在完全消失了。這可以通過一個小調整來解決嗎? – Rein

+0

你使用過html_entity_decode還是preg_replace? –

+0

我在你的回答中使用了preg_replace。 – Rein

0

使用PHP Tidy庫清理你的HTML。但在你的情況下,我會使用DOMDocument類從html獲取數據。

3

這些字符似乎是html實體。嘗試:

html_entity_decode(strip_tags($my_html_code)); 
+0

出於某種原因,這並不會改變他們... – Rein

+0

完美,這工作的一個治療我有一個問題。 – Railto