php中文字元長度
A. php中如何限制字元長度以及如何去掉
用多位元組mb_strlen()統計字元串的字元長度。
在用mb_substr()截取指定長度的字元。
代碼中用名義上針對latin事實上針對byte位元組的strlen, substr是不能正確截取非拉丁文字的(比如阿拉伯文、中文)
B. php如何獲取中文字元長度,一個中文字元算一個
在PHP中專門的mb_substr和mb_strlen函數,可以對中文進行截取和計算長度,但是,由於這些函數並非PHP的核心函數,所以,它們常常有可能沒有開啟。要在php.ini中開啟即可。獲取長度實例:1 ,utf-8環境下使用
header('Content-type:text/html;charset=utf-8');
/**
*可以統計中文字元串長度的函數
*@param$str要計算長度的字元串
*@param$type計算長度類型,0(默認)表示一個中文算一個字元,1表示一個中文算兩個字元
*
*/
functionabslength($str)
{
if(empty($str)){
return0;
}
if(function_exists('mb_strlen')){
returnmb_strlen($str,'utf-8');
}
else{
preg_match_all("/./u",$str,$ar);
returncount($ar[0]);
}
}
$str='我們都是中國人啊,ye!';
$len=abslength($str);
var_mp($len);//return12
$len=abslength($str,'1');
echo'<br/>'.$len;//return22
/*
utf-8編碼下截取中文字元串,參數可以參照substr函數
@param$str要進行截取的字元串
@param$start要進行截取的開始位置,負數為反向截取
@param$end要進行截取的長度
*/
functionutf8_substr($str,$start=0){
if(empty($str)){
returnfalse;
}
if(function_exists('mb_substr')){
if(func_num_args()>=3){
$end=func_get_arg(2);
returnmb_substr($str,$start,$end,'utf-8');
}
else{
mb_internal_encoding("UTF-8");
returnmb_substr($str,$start);
}
}
else{
$null="";
preg_match_all("/./u",$str,$ar);
if(func_num_args()>=3){
$end=func_get_arg(2);
returnjoin($null,array_slice($ar[0],$start,$end));
}
else{
returnjoin($null,array_slice($ar[0],$start));
}
}
}
$str2='wo要截取zhongwen';
echo'<br/>';
echoutf8_substr($str2,0,-4);//returnwo要截取zhon
2,支持gb2312,gbk,utf-8,big5 中文截取方法
/*
* 中文截取,支持gb2312,gbk,utf-8,big5
*
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取長度
* @param string $charset utf-8|gb2312|gbk|big5 編碼
* @param $suffix 是否加尾綴
*/
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr"))
{
if(mb_strlen($str, $charset) <= $length) return $str;
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
if(count($match[0]) <= $length) return $str;
$slice = join("",array_slice($match[0], $start, $length));
}
if($suffix) return $slice."…";
return $slice;
}
C. php 中的mb_strlen 與 strlen 哪個跟javascript 中的length 相同,如果不同應該怎麼改的相同
額~ 如果是字元串長度的話 mb_strlen 和 Js 的 length 相同。
strlen是字元串長度,但是其實可以說是位元組長度,因為PHP還不支持unicode,所以對於多位元組字元沒法通過strlen正確的取得長度。如果編碼是gbk的話,一個漢字的長度是2, 如果是utf-8的話,一個漢字的長度一般是3,也可能不是,這個按照編碼區間來區分。
如果要出里多位元組字元字元串的話,就要用PHP 的一個 mb 擴展,mb族包含了一系列函數,可以去PHP 手冊看http://www.php.net/manual-lookup.php?pattern=mb&lang=en&scope=quickref
我也表達不是很明白。建議你網路或者google 一下 Unicode、ASCII、UTF-8、GBK~ 都看一下,就很明白了。PHP和JS支持的編碼不一樣,所以很多不一樣。
有問題可以Hi我。
D. PHP字元串長度計算 - strlen()函數使用介紹
strlen()函數和mb_strlen()函數
在PHP中,函數strlen()返回字元串的長度。函數原型如下:
復制代碼
代碼如下:
int
strlen(string
string_input);
參數string_input為要處理的字元串。
strlen()函數返回字元串所佔的位元組長度,一個英文字母、數字、各種符號均佔一個位元組,它們的長度均為1。一個中午字元占兩個位元組,所以一個中午字元的長度是2。例如
復制代碼
代碼如下:
<?php
echo
strlen("www.sunchis.com");
echo
strlen("三知開發網");
?>
「echo
strlen("www.sunchis.com");」的運行結果:15
「echo
strlen("三知開發網");」的運行結果:15
這里有一個疑問,一個中文字元不是佔2個位元組嗎?「三知開發網」,明明是五個漢字,運行的結果怎麼會是15?
原因出在這里:strlen()計算時,對於一個UTF-8的中文字元,會把它當做長度為3來處理。當出現中英文混排的情況下,怎麼准確的計算字元串的長度呢?這里,得引入另外一個函數mb_strlen()。mb_strlen()函數的用法與strlen()幾乎一摸一樣,只是多了一個指定字元集編碼的參數。函數原型為:
復制代碼
代碼如下:
int
mb_strlen(string
string_input,
string
encode);
PHP內置的字元串長度函數strlen無法正確處理中文字元串,它得到的只是字元串所佔的位元組數。對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差異了(在UTF-8編碼下,一個漢字佔3個位元組)。
因此,下面的代碼能准確計算出中文字元串的長度:
復制代碼
代碼如下:
<?php
$str
=
"三知sunchis開發網";
echo
strlen($str)."<br>";
//結果:22
echo
mb_strlen($str,"UTF8")."<br>";
//結果:12
$strlen
=
(strlen($str)+mb_strlen($str,"UTF8"))/2;
echo
$strlen;
//結果:17
?>
原理分析:
strlen()計算時,對待UTF-8的中文字元長度是3,所以「三知sunchis開發網」的長度為5×3+7×1=22
在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字元當作長度1來計算,所以「三知sunchis開發網」長度為5×1+7×1=12
剩下的就是純數學問題了,在此就不啰嗦了……
注意:對於mb_strlen($str,'UTF-8'),如果省略第二個參數,則會使用PHP的內部編碼。內部編碼可以通過mb_internal_encoding()函數得到。需要注意的是,mb_strlen並不是PHP核心函數,使用前需要確保在php.ini中載入了php_mbstring.dll,即確保「extension=php_mbstring.dll」這一行存在並且沒有被注釋掉,否則會出現未定義函數的問題。
E. php怎樣限制字元的顯示長度
思路:獲取字元串長度,和自己設置的要顯示的長度比較,超出,就截取處理
代碼例子如下:
$str="你好啊阿拉拉拉";
//處理長度不管中英文,都代表1個長度
preg_match_all("/./us",$str,$match);
$str_arr=$match[0];
$length_val=count($str_arr);//字元串長度
$show_str=implode('',$str_arr);//最後要顯示的字元串
//控制的顯示長度
$length_limit=3;
//字元串超出控制長度,顯示處理
if($length_val>$length_limit){
$show_str="";
for($i=0;$i<$length_limit;$i++){
$show_str.=$str_arr[$i];
}
$show_str.="...";//最後以...代表後面字元省略
}
echo$show_str;
F. PHP怎麼獲取字元串長度
PHP對中文字元串的處理一直困擾於剛剛接觸PHP開發的新手程序員。下面簡要的剖析一下PHP對中文字元串長度的處理:
(1)PHP自帶的函數如strlen()、mb_strlen()都是通過計算字元串所佔位元組數來統計字元串長度的,一個英文字元佔1位元組;
(2)中文則不然,做中文網站一般會選擇兩種編碼:gbk/gb2312或是utf-8。utf-8能兼容更多的字元,所以受到很多站長的喜愛。gbk與utf-8對中文的編碼不同,導致中文在gbk與utf-8編碼下所佔位元組也有差異。