PHP函式substr 擷取中文字元亂碼

2021-10-10 21:58:58 字數 1182 閱讀 2806

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...