2010-11-11 37 views
3

我想修改<img src="">屬性中不太格式錯誤的HTML(WordPress帖子)。我知道我可以採取簡單的方式並使用正則表達式,但我恐怕people in blue furry suits will come haunt me in my sleep用DOM解析HTML時保留文件偏移量?

如果我使用DOM解析器讀取HTML並修改<img>標籤,恐怕我無法完全重構帖子(因爲只有我的修改),因爲DOM解析器可能也會這樣做很多清理工作,並可能刪除重要數據。 SAX解析器可能無法處理無效的XML,所以這也不起作用。因此,有沒有一種中間的方式,我可以使用DOM解析器,但是知道每個元素的起始位置,所以我可以從那裏做字符串替換或類似的東西?我知道源文檔中不存在DOM樹中的某些節點(<b>Some <i>bizarre</b> formatting</i>可能會觸發此操作),但這是否意味着它始終不可能?我看到在PHP 5.3中添加了DOMNode::getLineNo() function,但我使用的是5.2.x.

回答

0

如果PHP的DOM會寫出「太乾淨」的結果,你可能嘗試基於字符串SimpleHTMLDOM是否更寬鬆。

但是,隨着格式的變化,我將永遠不會完全相信解析器做到「正確」。但試試看,也許它只是跳過這樣的東西。

DOM庫的DOMNode類有getLineNo()方法。我不完全看到這是如何工作的,因爲它沒有提供抵消它。不知道這是否會幫助你的用例。

+0

我的格式化例子是理論上的,爲什麼這不能適用於所有的DOM節點。我相信WordPress編輯器會清理它,所以我不必處理這種情況。而'DOMNode :: getLineNo()'函數可以用於減少最終字符串替換的範圍,但是由於我在PHP 5.2中,因此我無法使用它。 – 2010-11-11 15:41:15

+0

@Jan然後DOM或SimpleHTML都可能適合你! – 2010-11-11 16:57:57