2011-12-17 76 views
3

解析純文本我有一個HTML字符串,我想就其純文本內容的一些文本格式。我的意思是,我想提取任何文本內容,但不包含在標籤大括號中。但是......我計劃使用一個DOMDocument,但我不知道我在尋找的標籤,也沒有自己的ID。PHP - 在一個HTML字符串

例如,我可以有一個字符串

<p><i>some tex<span class="aclass">t</span> in the document.</i>Whoooa <img src="anImage.png" /></p> 

而且我想重新恢復在頁面中的原標籤格式化整個文本之前,將字符串「在document.Whoooa一些文本」格式。例如在該點後面放一個空格並刪除結尾空格。

我會怎麼做呢?

回答

2

如果可能的話做客戶端是使用jQuery容易,它是專門爲方便DOM操作製造。一般來說,你將需要使用preg_match和/或XML解析器。我認爲有幾個dom解析器,但我不記得php是否包含任何解析器。

+0

嘗試使用preg_match來處理html是一個沮喪的練習。 – 2011-12-17 01:57:37

0

使用strip_tags

$str = '<p><i>some tex<span class="aclass">t</span> in the document.</i>Whoooa <img src="anImage.png" /></p>'; 
echo strip_tags($str); 

這將輸出:

string(33) "some text in the document.Whoooa " 

然後,對於你的問題的其餘部分:

// Put a space after the point 
$str = preg_replace('/\.([^ ])/', '. $1', $str); 
// and deleting the ending space. 
$str = rtrim($str, ' '); 

Demo

+3

他要求有一種方法來編輯文本內容*而不破壞標籤。 – 2011-12-17 02:00:13

1

我已經開始創建一個名爲TextRange類,讓一個簡單的文本節點接口作爲一個特定的字符串表示DOMDocument部分。

你需要找出字符串需要更改,然後TextRange類可以根據需要拆分的節點。我已經把它的一個長的解釋在以下兩個問題:

第一個還含有相當原始TextRangeTrimmer類可以在開頭和結尾刪除空格的這種TextRange

由於您只修改文本節點值,所以始終保留原始標記。根據您的使用情況,您可能需要稍後清理未使用的(空的)標籤。

它的工作原理基於DOMDocument並接受一個父DOMElement(範圍將是所有textnode兒童),XPath查詢結果(DOMNodeList)或僅textnode元件的陣列。