PHP 中英文混排截取字符串


轉~~~~~由於網上版本太多,不知道誰是原版,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){ // 此處設定從0開始截取,取10個追加...,使用utf8編碼 // 注意追加的...也會被計算到長度之內 $str = mb_strimwidth($str, 0, 10, '...', 'utf8'); } // 最后輸出 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啊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM