PHP截取utf-8字符串的具體方法介紹
我們對PHP語言都已經(jīng)不再陌生,它是一個(gè)很常用的語言。今天我們將向大家介紹的是有關(guān)PHP截取utf-8字符串的相關(guān)方法。為了支持多語言,數(shù)據(jù)庫里的字符串可能保存為UTF-8編碼,在網(wǎng)站開發(fā)中可能需要用php截取字符串的一部分。為了避免出現(xiàn)亂碼現(xiàn)象,編寫如下的UTF-8字符串截取函數(shù)。
#t#關(guān)于utf-8的原理請看 UTF-8 FAQ
UTF-8編碼的字符可能由1~3個(gè)字節(jié)組成, 具體數(shù)目可以由第一個(gè)字節(jié)判斷出來。(理論上可能更長,但這里假設(shè)不超過3個(gè)字節(jié))
第一個(gè)字節(jié)大于224的,它與它之后的2個(gè)字節(jié)一起組成一個(gè)UTF-8字符
第一個(gè)字節(jié)大于192小于224的,它與它之后的1個(gè)字節(jié)組成一個(gè)UTF-8字符
否則第一個(gè)字節(jié)本身就是一個(gè)英文字符(包括數(shù)字和一小部分標(biāo)點(diǎn)符號(hào))。
以前為某網(wǎng)站設(shè)計(jì)的代碼(也是現(xiàn)在用在首頁的長度截取的函數(shù))
PHP截取utf-8字符串的代碼示例:
- < ?php // Cut_Str;
- //$sourcestr 是要處理的字符串
- //$cutlength 為截取的長度(即字?jǐn)?shù))
- function cut_str($sourcestr,$cutlength)
- {
- $returnstr=”;
- $i=0;
- $n=0;
- $str_length=strlen($sourcestr);//字符串的字節(jié)數(shù)
- while (($n<$cutlength) and ($i<=$str_length))
- {
- $temp_str=substr($sourcestr,$i,1);
- $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii碼
- if ($ascnum>=224) //如果ASCII位高與224,
- {
- $returnstr=$returnstr.substr($sourcestr,$i,3);
//根據(jù)UTF-8編碼規(guī)范,將3個(gè)連續(xù)的字符計(jì)為單個(gè)字符- $i=$i+3; //實(shí)際Byte計(jì)為3
- $n++; //字串長度計(jì)1
- }
- elseif ($ascnum>=192) //如果ASCII位高與192,
- {
- $returnstr=$returnstr.substr($sourcestr,$i,2);
//根據(jù)UTF-8編碼規(guī)范,將2個(gè)連續(xù)的字符計(jì)為單個(gè)字符- $i=$i+2; //實(shí)際Byte計(jì)為2
- $n++; //字串長度計(jì)1
- }
- elseif ($ascnum>=65 && $ascnum<=90)
//如果是大寫字母,- {
- $returnstr=$returnstr.substr($sourcestr,$i,1);
- $i=$i+1; //實(shí)際的Byte數(shù)仍計(jì)1個(gè)
- $n++; //但考慮整體美觀,大寫字母計(jì)成一個(gè)高位字符
- }
- else //其他情況下,包括小寫字母和半角標(biāo)點(diǎn)符號(hào),
- {
- $returnstr=$returnstr.substr($sourcestr,$i,1);
- $i=$i+1; //實(shí)際的Byte數(shù)計(jì)1個(gè)
- $n=$n+0.5; //小寫字母和半角標(biāo)點(diǎn)等與半個(gè)高位字符寬…
- }
- }
- if ($str_length>$cutlength){
- $returnstr = $returnstr . “…”;
//超過長度時(shí)在尾處加上省略號(hào)- }
- return $returnstr;
- }
以上就是PHP截取utf-8字符串的相關(guān)方法總結(jié),希望對大家有所幫助。