substr()函式在擷取字串時是按位元組來擷取的,在gbk/gb2312編碼下,乙個中文佔2個位元組;utf-8/unicode編碼下,乙個中文佔3個位元組。
<?php
$text
="竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任平生。"
;echo
$text
,"\n"
;// 竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任平生。
echo
strlen
($text).
"\n"
;// 57
echo
mb_strlen
($text),
"\n"
;// 19
$str1
=substr
($text,11
);echo
$str1
."\n"
;// �輕勝馬,誰怕?一蓑煙雨任平生。
substr函式在擷取字元時是按位元組來擷取的,中文字元在gb2312編碼時為2個位元組,utf-8編碼時為3個位元組,所以擷取指定長度的字串時如果截斷了漢字,那麼返回的結果顯示出來便會出現亂碼。
使用mb_substr()函式可保證不會出現亂碼,但缺點是長度統計變成了字元數統計,而不是按位元組數統計。用於顯示時,同樣長度的中文結果和英文結果會出現較大的顯示長度的差別。
<?php
$text
="竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任平生。"
;echo
$text
,"\n"
;// 竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任平生。
echo
strlen
($text).
"\n"
;// 57
echo
mb_strlen
($text),
"\n"
;// 19
$str1
=substr
($text,11
);echo
$str1
."\n"
;// �輕勝馬,誰怕?一蓑煙雨任平生。
$str2
=mb_substr
($text,11
);// 一蓑煙雨任平生。
echo
$str2
;
php擷取中文函式
擷取中文字元函式一 function cutstr string,length,dot charset utf 8 string str replace array array string strcut if strtolower charset utf 8 elseif 194 t t 223 ...
PHP中文字串擷取函式
首先是csdn論壇php斑竹xuzuning 嘮叨 老大的,支援gb2312,gbk,big三種編碼。以下是 len 19 text 怎麼將新聞的很長的標題只顯示前面一些字,後面用.來代替?echo strlen text len text substr text,0,len chr 0 chr 0...
字串擷取函式substr
substr 引數1,引數2 引數3 該系統函式返回被截後的子字串,它接受2個必選引數,引數1為要擷取的字串,引數2為擷取的開始位置,引數3可選,表示擷取長度。例子 substr abcdef 1 返回 bcdef 從索引1處開始擷取,如果沒有指定擷取長度,預設擷取後面的所有字元。substr ab...