php中計(jì)算中文字符串長度、截取中文字符串的函數(shù)代碼
以下幾個(gè)函數(shù)用起來頗為順手的。不過要知道,得在utf-8環(huán)境下使用。
header('Content-type:text/html;charset=utf-8');
/**
* 可以統(tǒng)計(jì)中文字符串長度的函數(shù)
* @param $str 要計(jì)算長度的字符串
* @param $type 計(jì)算長度類型,0(默認(rèn))表示一個(gè)中文算一個(gè)字符,1表示一個(gè)中文算兩個(gè)字符
*
*/
function abslength($str)
{
if(empty($str)){
return 0;
}
if(function_exists('mb_strlen')){
return mb_strlen($str,'utf-8');
}
else {
preg_match_all("/./u", $str, $ar);
return count($ar[0]);
}
}
$str = '我們都是中國人啊,ye!';
$len = abslength($str);
var_dump($len); //return 12
$len = abslength($str,'1');
echo '<br />'.$len; //return 22
/*
utf-8編碼下截取中文字符串,參數(shù)可以參照substr函數(shù)
@param $str 要進(jìn)行截取的字符串
@param $start 要進(jìn)行截取的開始位置,負(fù)數(shù)為反向截取
@param $end 要進(jìn)行截取的長度
*/
function utf8_substr($str,$start=0) {
if(empty($str)){
return false;
}
if (function_exists('mb_substr')){
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return mb_substr($str,$start,$end,'utf-8');
}
else {
mb_internal_encoding("UTF-8");
return mb_substr($str,$start);
}
}
else {
$null = "";
preg_match_all("/./u", $str, $ar);
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return join($null, array_slice($ar[0],$start,$end));
}
else {
return join($null, array_slice($ar[0],$start));
}
}
}
$str2 = 'wo要截取zhongwen';
echo '<br />';
echo utf8_substr($str2,0,-4); //return wo要截取zhon
支持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;
}
- PHP字符串長度計(jì)算 - strlen()函數(shù)使用介紹
- php自定義函數(shù)實(shí)現(xiàn)統(tǒng)計(jì)中文字符串長度的方法小結(jié)
- 最準(zhǔn)確的php截取字符串長度函數(shù)
- 利用PHP函數(shù)計(jì)算中英文字符串長度的方法
- PHP中preg_match函數(shù)正則匹配的字符串長度問題
- php strlen mb_strlen計(jì)算中英文混排字符串長度
- 詳解PHP中strlen和mb_strlen函數(shù)的區(qū)別
- 淺析PHP中strlen和mb_strlen的區(qū)別
- 自己寫的php中文截取函數(shù)mb_strlen和mb_substr
- PHP中strlen()和mb_strlen()的區(qū)別淺析
- php中strlen和mb_strlen用法實(shí)例分析
- php常用字符串長度函數(shù)strlen()與mb_strlen()用法實(shí)例分析
相關(guān)文章
Content-Disposition使用方法和注意事項(xiàng)
這篇文章主要為大家詳細(xì)介紹了Content-Disposition使用方法和注意事項(xiàng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09thinkphp框架實(shí)現(xiàn)刪除和批量刪除
這篇文章主要為大家詳細(xì)介紹了thinkPHP框架實(shí)現(xiàn)刪除和批量刪除的相關(guān)資料,需要的朋友可以參考下2016-06-06php解析字符串函數(shù)sscanf的實(shí)用方法
在PHP編程中,有時(shí)需要對字符串進(jìn)行解析,而sscanf函數(shù)就是一種非常方便的解析工具,本文詳細(xì)介紹了sscanf函數(shù)的用法,包括基本用法和高級用法,通過大量的示例代碼,展示了如何使用sscanf函數(shù)解析各種不同格式的字符串2023-09-09PHP實(shí)現(xiàn)生成數(shù)據(jù)字典功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)生成數(shù)據(jù)字典功能,涉及php針對mysql常見的連接、數(shù)據(jù)表查詢、遍歷、table表格構(gòu)成等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05PHP curl CURLOPT_RETURNTRANSFER參數(shù)的作用使用實(shí)例
這篇文章主要介紹了PHP curl CURLOPT_RETURNTRANSFER參數(shù)的作用使用實(shí)例,CURLOPT_RETURNTRANSFER參數(shù)的作用是把CRUL獲取的內(nèi)容賦值到變量,需要的朋友可以參考下2015-02-02php實(shí)現(xiàn)文件與16進(jìn)制相互轉(zhuǎn)換的方法示例
這篇文章主要介紹了php實(shí)現(xiàn)文件與16進(jìn)制相互轉(zhuǎn)換的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02Discuz! 5.0.0論壇程序中加入一段js代碼,讓會(huì)員點(diǎn)擊下載附件前自動(dòng)彈出提示窗口
Discuz! 5.0.0論壇程序中加入一段js代碼,讓會(huì)員點(diǎn)擊下載附件前自動(dòng)彈出提示窗口...2007-04-04php對二維數(shù)組進(jìn)行相關(guān)操作(排序、轉(zhuǎn)換、去空白等)
這篇文章主要介紹了php對二維數(shù)組進(jìn)行相關(guān)操作,包括php對二維數(shù)組排序、轉(zhuǎn)換、去空白,以及去重復(fù)值等,感興趣的小伙伴們可以參考一下2015-11-11php上傳后臺(tái)無法收到數(shù)據(jù)解決方法
在本篇文章里小編給大家整理的是關(guān)于php無法收到數(shù)據(jù)的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。2019-10-10