PHP實現中文字串擷取無亂碼

2022-06-26 07:18:12 字數 1226 閱讀 9099

ascii碼:        乙個中文漢字佔兩個位元組的空間。

utf-8編碼:   乙個中文(含繁體)等於三個位元組。

unicode編碼:乙個中文(含繁體)等於兩個位元組。

我們寫頁面基本都是utf-8編碼

<?php

echo substr("php中文網",0,5);?>

substr:返回字串子串

substr( ) 第乙個引數是要擷取的字串,第二個引數表示從0位置開始擷取,第三個引數表示擷取的長度。

結果:php�

說明,substr是按著位元組數進行擷取的,所以出現亂碼。

<?php

echo mb_substr("php中文網",0,5);?>

結果:php中文

說明,mb_substr是按著字元數來擷取的,所以結果正常

<?php

echo mb_strcut("php中文網",0,7);?>

結果:php中

說明,mb_strcut也是按著位元組數擷取的,且擷取後不會出現亂碼,多出的位元組並不顯示。

所以,可以用mb_substr( )和mb_strcut( )進行字元擷取,且無亂碼。

說明,將字串的一部分插入或替換為另一部分,substr_replace( )函式使用也會有亂碼出現,建議用mb_substr擷取,再用連線字串解決。

語法: substr_replace(string,replacement,start,length);

<?php

echo substr_replace("hello world","shanghai",-5,);?>

hello shanghai

第乙個引數:原字串

第二個引數:要替換的字串

第三個引數:規定從字串的何處開始替換,正數,負數,0

第四個引數:可選,規定從當前位置開始要替換的長度(預設從當前位置開始,全部替換)

正數:替換的長度

負數:待替換的字串距離string結尾的個數

0:表示插入而非替換

<?php

echo substr_replace("hello 上海","shanghai",7);?>

hello �shanghai

=>

<?php

$string=mb_substr("hello 上海",0,6);

echo $string.'shanghai';?>

hello shanghai

PHP實現中文字串擷取無亂碼的方法

在ascii中,0xa0表示漢字的開始 其中php中的乙個函式ord 函式 此函式功能返回乙個字元的askii碼值 如ord a 65 請看此函式 實現中文字串擷取無 這是明顯用來處理擷取一段漢字的程式,在ascii中,0xa0表示漢字的開始 其中php中的乙個函式ord 函式 此函式功能返回乙個字...

PHP中實現中文字串擷取無亂碼的方法

在php中,substr 函式擷取帶有中文字串的話,可能會出現亂碼,這是因為中西文乙個位元組所占有的位元組數不一樣,而substr的長度引數是按照位元組去算的,在gb2312編碼時,乙個中文佔2個位元組,英文為1個位元組,而在utf 8編碼當中,乙個中文可能占有2個或3個位元組,英文或半形標點佔1位...

實現中文字串擷取無亂碼的方法

utf 8中文擷取函式 在php中,substr 函式擷取帶有中文字串的話,可能會出現亂碼,這是因為中西文乙個位元組所占有的位元組數不一樣,而substr的長度引數是按照位元組去算的,在gb2312編碼時,乙個中文佔2個位元組,英文為1個位元組,而在utf 8編碼當中,乙個中文可能占有2個或3個位元...