下午的時候同事碰到了一個小問題,是這樣的:他從別人的接口中取回一長串的HTML,但是他只需要其中的一塊。這就涉及到在PHP中解析Html字符串的問題,花了挺長時間,找了不同的方法,在此記錄一下:
1.最簡單的就是字符串解析,靈活運用 strpos , substr 混合處理,把那一段代碼摳出來。由於他要取的是一個固定的div內的東西,而且那個div 的 class 屬性也是固定的,所以這種方法倒也簡單,直接先以<div class=”xxx” 作為needle 找到那個div,然後做一些操作就行了。
2.PHP DOMDocument 。聽到這個問題的時候首先想到的是PHP的DOM解析功能,剛開始真的以為找到了救星。但是最後發現這個東西的功能不能解決問題,反正我是沒找到。因為最好我們想要把div裡面的Html代碼輸出出來,結果用 DOMDocument 提供的方法輸出的全是不帶標簽的純文本,無奈,只好棄用。(可能是我不知道它的用法,希望知道的不吝賜教。)
3. Tidy Functions 。其實 Tidy 是用來整理HTML的,不過它也可以進行Html的解析處理。先使用tidy_parse_string() 把字符串轉換成 tidy 對象,然後就可以利用tidy的方法對其進行處理了,還算方便,不過這個東西只能在 PHP 4.3.x 和 PHP 5 的版本下才有。具體方法和使用請參考手冊。
4. strip_tags() 。無意中發現了這個函數,實在是太好用了!!上面幾種方法最好我都是結合著strip_tags()來使用的。strip_tags() 可以過濾掉Html和PHP標簽,返回一個全新的字符串!用法如下:
string strip_tags ( string 要處理的字符串 [, string 想保留的標簽] )
如果你想保留某些標簽,比如 <a> 標簽,就可以這樣寫,strip_tags($str, “<a>”) ,如果想保留多個標簽,就可以這麼寫: strip_tags($str, “<a> <img>”); 標簽之間用空格隔開就可以了。
5.另外,據我另一個同事測試,好像使用 XMLReader 來搞,沒嘗試,有興趣的可以搞一下。
在工作中學習到的一些小東西,記錄下來,省的以後忘記了。如果大家有什麼更好的技巧,歡迎賜教,謝謝。