在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理。在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开启即可。如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了。
以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。
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
);
$len
= abslength(
$str
,
'1'
);
echo
'<br />'
.
$len
;
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);
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
);
$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
;
本文转自:
github