php輕松實(shí)現(xiàn)中英文混排字符串截取
先給大家介紹用到的函數(shù):
mb_strwidth($str, $encoding) 返回字符串的寬度
$str 要計(jì)算的字符串
$encoding 要使用的編碼,如 utf8、gbk
mb_strimwidth($str, $start, $width, $tail, $encoding) 按寬度截取字符串
$str 要截取的字符串
$start 從哪個(gè)位置開(kāi)始截取,默認(rèn)是0
$width 要截取的寬度
$tail 追加到截取字符串后邊的字符串,常用的是 ...
$encoding 要使用的編碼
下邊給大家實(shí)例演示:
<?php
/**
* utf8 編碼格式
* 1個(gè)中文占用3個(gè)字節(jié)
* 我們希望的是1個(gè)中文占用2個(gè)字節(jié),
* 因?yàn)閺膶挾壬峡?個(gè)英文字母占用的位置相當(dāng)于1個(gè)中文
*/
// 測(cè)試字符串
$str = 'aaaa啊啊aaaa啊啊啊aaa';
echo strlen($str); // 只用strlen輸出為25個(gè)字節(jié)
// 必須指定編碼,不然會(huì)使用php的內(nèi)碼 mb_internal_encoding()可以查看內(nèi)碼
// 使用mb_strwidth輸出字符串的寬度為20使用utf8編碼
echo mb_strwidth($str, 'utf8');
// 只有寬度大于10才截取
if(mb_strwidth($str, 'utf8')>10){
// 此處設(shè)定從0開(kāi)始截取,取10個(gè)追加...,使用utf8編碼
// 注意追加的...也會(huì)被計(jì)算到長(zhǎng)度之內(nèi)
$str = mb_strimwidth($str, 0, 10, '...', 'utf8');
}
// 最后輸出 aaaa啊... 4個(gè)a算4個(gè) 1個(gè)啊算2個(gè) 3個(gè)點(diǎn)算3個(gè) 4+2+3=9
// 是不是很簡(jiǎn)單啊,有的人說(shuō)了為什么是9個(gè)不是10個(gè)嗎?
// 因?yàn)檎谩鞍 钡暮筮呥€是“啊”,中文算2個(gè),9+2=11 超出了設(shè)定,所以去掉1個(gè)就是9了
echo $str;
下邊再給大家介紹一些其它函數(shù)吧:
mb_strlen($str, $encoding) 返回字符串的長(zhǎng)度
$str 要計(jì)算的字符串
$encoding 使用的編碼
mb_substr($str, $start, $length, $encoding) 截取字符串
$str 要截取的字符串
$start 從哪里開(kāi)始截取
$length 截取多長(zhǎng)
$encoding 使用的編碼
其實(shí)這2個(gè)函數(shù)和strlen()、substr()很像,唯一的不同就是可以設(shè)定編碼。
下邊上實(shí)例:
<?php
/**
* utf8 編碼格式
* 1個(gè)中文占用3個(gè)字節(jié)
*/
$str = 'aa12啊aa';
echo strlen($str); // 直接輸出長(zhǎng)度為9
// 輸出長(zhǎng)度為7,為什么是7呢?
// 注意這里設(shè)定編碼以后,不管是中文還是英文每個(gè)長(zhǎng)度都為1
// a a 1 2 啊 a a
// 1+1+1+1+1+1+1 = 7
// 是不是正好7個(gè)字符啊
echo mb_strlen($str, 'utf8');
// 同樣mb_substr也是一樣的
// 我現(xiàn)在只想要5個(gè)字符
echo mb_substr($str, 0, 5, 'utf8'); // 輸出 aa12啊
其實(shí)mb擴(kuò)展里邊很有很多好用的函數(shù),這里就不給大家一一列舉。
有興趣的朋友可以查看官方手冊(cè)
好了,今天就先介紹到這里了。
相關(guān)文章
MySql數(shù)據(jù)庫(kù)查詢(xún)結(jié)果用表格輸出PHP代碼示例
這篇文章主要介紹了MySql數(shù)據(jù)庫(kù)查詢(xún)結(jié)果用表格輸出PHP代碼示例,本文直接給出代碼示例,需要的朋友可以參考下2015-03-03PHP 5.3和PHP 5.4出現(xiàn)FastCGI Error解決方法
這篇文章主要介紹了PHP 5.3和PHP 5.4出現(xiàn)FastCGI Error解決方法,需要的朋友可以參考下2015-02-02PHP門(mén)面模式實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送示例
這篇文章主要為大家介紹了PHP門(mén)面模式實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05dedecms中顯示數(shù)字驗(yàn)證碼的修改方法
dedecms中顯示數(shù)字驗(yàn)證碼的修改方法...2007-03-03批量獲取memcache值并按key的順序返回的實(shí)現(xiàn)代碼
一臺(tái)memcache時(shí)返回是正確的,在有多臺(tái)memcache時(shí)就無(wú)法一一對(duì)應(yīng)的按順序返回。2011-06-06PHP獲取系統(tǒng)毫秒數(shù)時(shí)間方法
這篇文章主要介紹了PHP獲取系統(tǒng)毫秒數(shù)時(shí)間方法,php中獲取時(shí)間方法是date(),在php中獲取時(shí)間戳方法有time()、strtotime(),文章通告主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08