搜尋
首頁php教程PHP开发PHP HTML程式碼字串 截取實現程式碼

而且給的資料是HTML程式碼字串,例如這樣:

截取的時候是要截取div 標籤內部的東西,而且要保留HTML標籤,只是對其中的文字做處理。例如我可能只是截取到「李四」的「李」字,但是如果就這樣放到前端的話,「李四」前面的 a 標籤是沒有閉合的,所以截取之後要保證HTML的語法正確。

這個問題確實不太好搞,讓我鬱悶了兩天。請注意,這只是一個字串,只不過內容是HTML程式碼,是沒有什麼DOM的。如果在前端處理就好辦了,直接DOM獲取,然後對裡面的節點進行處理,最後把innerHTML 之類的東西輸出就搞定了。現在可不行了,得換個思路。同事的思路是這樣的:

遍歷字串的每一個字元。設定一個標記,碰到標籤開始的標記之後再開始計數。對標籤內部的字串處理的時候,還要先判斷目前字元的編碼是不是可能是中文,一般來說PHP中UTF-8 編碼的中文字元的長度都是3,所以如果碰到是中文字元編碼,就要跳過兩個不記數……說到這裡我自己頭已經開始大了。個人認為這種方法很不爽,首先這種精緻的邏輯不太容易控制,而且 UFT-8 編碼下中文產生的長度有可能是3個或4個 所以代碼的嚴密性值得懷疑。

我個人的思路是,用 Tidy 來搞(具體用法請看PHP手冊吧)。昨天研究了一下那個 Tidy ,發現這個東西還挺好用的。首先,把這個字串轉換成Tidy 對象,這樣:

$tidy = tidy_parse_string($str, array(), 'utf8′); // 最後一個是設定編碼的,注意,這裡是utf8 ,不是utf- 8,沒有中間那個連線。

然後取得$tidy中的body(因為轉換之後$tidy會自動加上

等標籤):

$body = tidy_get_body($tidy);

這個時候你可以用var_dump 看一些$body 的結構,會發現它把每個標籤都變成了一個對應的對象,裡面有對應的屬性。舉例來說,例如sdf ,這麼一條語句對應的一些屬性有:

name=>”a”
value => “sdf
child=> array{[0]=>一個文本節點對象,value是sdf}
attribute=array{”href”=>”#”}
…..其他屬性

可以看到,我們其實是可以單獨去處理a 標籤對應節點下面的文字節點的值的,這樣就不會破壞任何HTML完整性。原來我以為改變a 標籤中文字節點的值之後, a 標籤的value也會跟著改變,那樣我直接返回a標籤對應節點的value就OK了,沒想到不是那個樣子,哎,所以處理過其中的文字之後還是要自己拼出新的HTML。

知道了Tidy物件的結構之後,一切就好辦了,只要遍歷所有的節點,對於本需求來說,就是找到那個 div 標籤,然後開始處理裡面的節點。程式碼如下:

if(mb_strwidth($subchild->value, 'utf-8′) >= $len)
{
$subchild->value = mb_strimwidth($subchild->value, 0, $len, '… ', 'utf-8′);
$trimed_str .= $subchild->value;
break;
}
else
{
$trimed_str .= $subchild->value;$
$len = $len - subchild->value, 'utf-8′);
}

裡面的$subchild 就是一個子節點。注意,這裡使用了 mb_strwidth 來取得字串長度。嚴重推薦這個 mb_strwidth,很好用,它會把中文當作兩個字元長度處理,正好符合這裡的需求!而且截取字串的時候用到了 mb_strimwidth,這個函數也會把中文當作兩個字元長度處理,mb_ 開頭的函數真是好用啊。

具體程式碼我就不寫出來了,因為是針對一個需求寫的,沒做成通用的形式。哪天我有時間做成通用的再發布一下。

另外,可惜FireFox不支援 text-overflow 屬性,不然也不用後台那麼辛苦地去截斷了。如果大家有更好的方法,可以留言討論,更多相關文章請關注PHP中文網(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能