PHP 中英文混排擷取字串

2022-07-23 18:39:17 字數 1739 閱讀 8204

轉~~~~~由於網上版本太多,不知道誰是原版,so~不標位址了

mb_strwidth($str, $encoding) 返回字串的寬度

$str 要計算的字串

$encoding 要使用的編碼,如 utf8、gbk

mb_strimwidth($str, $start, $width, $tail, $encoding) 按寬度擷取字串

$str 要擷取的字串

$start 從哪個位置開始擷取,預設是0

$width 要擷取的寬度

$tail 追加到擷取字串後邊的字串,常用的是 ...

$encoding 要使用的編碼

<?php 

/** * utf8 編碼格式

* 1個中文占用3個位元組

* 我們希望的是1個中文占用2個位元組,

* 因為從寬度上看2個英文本母占用的位置相當於1個中文

*///測試字串

$str = 'aaaa啊啊aaaa啊啊啊aaa';

echo strlen($str); //只用strlen輸出為25個位元組

// 必須指定編碼,不然會使用php的內碼 mb_internal_encoding()可以檢視內碼

// 使用mb_strwidth輸出字串的寬度為20使用utf8編碼

echo mb_strwidth($str, 'utf8');

//只有寬度大於10才擷取

if(mb_strwidth($str, 'utf8')>10)

//最後輸出 aaaa啊... 4個a算4個 1個啊算2個 3個點算3個 4+2+3=9

// 是不是很簡單啊,有的人說了為什麼是9個不是10個嗎?

// 因為正好「啊」的後邊還是「啊」,中文算2個,9+2=11 超出了設定,所以去掉1個就是9了

echo $str;

mb_strlen($str, $encoding) 返回字串的長度

$str 要計算的字串

$encoding 使用的編碼

mb_substr($str, $start, $length, $encoding) 擷取字串

$str 要擷取的字串

$start 從**開始擷取

$length 擷取多長

$encoding 使用的編碼

其實這2個函式和strlen()、substr()很像,唯一的不同就是可以設定編碼。

下邊上例項:

<?php 

/** * utf8 編碼格式

* 1個中文占用3個位元組

*/$str = 'aa12啊aa';

echo strlen($str); //直接輸出長度為9

// 輸出長度為7,為什麼是7呢?

// 注意這裡設定編碼以後,不管是中文還是英文每個長度都為1

// a a 1 2 啊 a a

// 1+1+1+1+1+1+1 = 7

// 是不是正好7個字元啊

echo mb_strlen($str, 'utf8');

//同樣mb_substr也是一樣的

// 我現在只想要5個字元

echo mb_substr($str, 0, 5, 'utf8'); //輸出 aa12啊

php 中英文混排字串擷取

需要用到兩個系統函式 1.mb strwidth str,encoding 返回字串的寬度 str 要計算的字串 encoding 要使用的編碼,如 utf8 gbk 2.mb strimwidth str,start,width,tail,encoding 按寬度擷取字串 str 要擷取的字串 s...

字串處理 中英文擷取

判斷乙個字元是ascill字元還是其它字元 如漢,日,韓文本元 param char c,需要判斷的字元 return boolean,返回true,ascill字元 public static boolean isletter char c 得到乙個字串的長度,顯示的長度,乙個漢字或日韓文長度為2...

PHP擷取中英文本串

php擷取gb2312中文字串 php擷取gb2312中文字串 param str 被擷取的字串 param start 起始長度 param len 擷取長度 param suffix 字尾字串 function gbk str str,start,len,suffix i else return...