這個功能在php輸出頁面的時候很常用 ,就是把乙個字串擷取為不大於某個長度的字串。本身是很簡單的事情,但是附加了一些需求:1,字串中含有中文,也就是單位元組雙位元組混著的。2,字串中含有html**。
對於中文擷取,網上有現成的**可以拿來用,就像這樣:
function
trunk(
$str
,$most,=
"...")
return
substr_cut(
$str
,$most
-strlen())
.$apend
;}function
substr_cut(
$str_cut
,$length
)return
$str_cut
;}這裡就是簡單的判斷一下位元組是否大於128,是就往前多移一位。因為對於gb2312編碼,凡雙位元組第乙個位元組都是大於128的。
至於第二個需求,含有html**的,其實我覺得這樣的要求通過css來做更加合適了。
通過設定width,height,line-height限定其塊大小後,再設定overflow
:hidden
;就可以做到了。如果只為ie而做的話,那麼有更多的css手段來控制超出邊界後的處理。
如果一定要自己寫程式處理的話,我想最好是只處理簡單情況,如果僅為了擷取含html**的字串就要寫乙個完全的html parser的話,未免太小題大作了。這裡我寫了一段僅處理成對、非巢狀情況的:
function
trunkhtml(
$str
,$most,=
"...")
if(strlen
($notagstr
) <=
$most
) $str_cut
=substr_cut(
$notagstr
,$most
-strlen
());
$cut_len
=strlen
($str_cut
);$istag
=false
;foreach
($arr
as$i
=>
$v)
else}}
$istag=!
$istag
;}assert
(false
);return
$str_cut
;}這裡做法也不複雜,先用正則把它分割開來,取出不在<>中的部分拼在一起,先用前面的substr_cut擷取一次,記住最終截了多長。然後再用各個部分長度去減,減到不夠的時候就確定是截在哪個位置了。因為假定html標籤都是成對的,最後再判斷一下是否處在一對標籤中。
php 字串的擷取
php中有非常多的字串處理函式,其中就有字串擷取函式。1 英文本串的擷取函式substr 函式說明 substr 字串變數,開始擷取的位置,擷取個數 例如 str i love you 擷取love這幾個字母 echo substr str,2,4 為什麼開始位置是2呢,因為substr函式計算字串...
php 擷取 ,php怎麼擷取字串
php內建了大量的字串操作函式,比如php implode,explode等等,php擷取字串,可以用substr,mb substr二個函式。phpsubstr語法substr string,start,length 引數string 即要擷取的字串 start 即要擷取的開始位置 0表示從從前往...
PHP擷取HTML字串
擷取html字串 static function cutstr string,length,dot pre chr 1 end chr 1 string str replace array array pre.end,pre.end,pre.end,pre.end string strcut n t...