2010-01-04 113 views
2

它推出了很多非封閉標籤象下面這樣:如何處理html摘錄?

(strlen($row['body']) > 200 ? substr($row['body'],0,200) . '...' : $row['body']) 

而且整個頁面的佈局被打破,如何處理:

<div> 
<table>...</table> 

</div>由這樣的代碼被截斷用它?

+0

這是什麼具體到? – 2010-01-04 03:14:05

回答

4

假設$row['body']包含要截斷200個可見字符的HTML:

地帶HTML標籤

這是最快的修復,但可能不是你想要的東西:

$body= strip_tags($row['body']); 
echo(strlen($body) > 200 ? substr($body,0,200) . '...' : $body); 

解析HTML並截斷文本

使用PHP的DOMDocument類,您可以解析HTML,檢查HTML標記中的文本長度,計算內容中文本的長度,並在保留格式良好的HTML時從$row['body']中的HTML限制字符後刪除任何標記。

+0

您可以顯示如何使用DOMDOcument執行此操作的示例? – JCM 2012-01-26 16:02:32

0

我假定你已經離開它爲簡潔,但我沒有看到標記

應該

<div> 
<table><tr><td>...</td></tr></table> 

還可以使用下面的你可能有HTML嵌入在$行[「身體」]

(strlen($row['body']) > 200 ? substr($row['body'],0,200) . '...' : htmlspecialchars($row['body'])) 

DC

1

下面是如何創建一個帖子預覽或摘錄塔爲例t包含有效的HTML。它解析使用PHP的DOM文檔的HTML作爲leepowers建議:

http://bizzybytes.com/html-excerpt-php

+0

如果長度檢查是檢查文本內容的長度,那麼這會更好,但不包括html標籤本身。 – 2013-02-27 18:45:34

+0

同意!但是有人說,有人比我更聰明,「過度優化是萬惡之源」。更簡單的方法是增加$ num_chars以適應更多的實際文本(減去html)。另一個變量和$ node-> textContent的使用會爲你帶來你想要的。 – Morgan 2013-09-12 22:29:58