在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理。在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开启即可。如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了。
以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
header(
'Content-type:text/html;charset=utf-8'
);
/**
* 可以统计中文字符串长度的函数
* @param $str 要计算长度的字符串
* @param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
*
*/
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编码下截取中文字符串,参数可以参照substr函数
@param $str 要进行截取的字符串
@param $start 要进行截取的开始位置,负数为反向截取
@param $end 要进行截取的长度
*/
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 中文截取方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/*
* 中文截取,支持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
;
}
本文转自:github
作者:
wish123 出处:
http://www.cnblogs.com/wish123/archive/2011/08/09/2132150.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
|