在PHP
程序开发,字符串截取
操作是
经常进行的,例如,当输出信息列表不是很长,当印刷的文章摘要,一系列字符串截取操作必须被
执行。我们满足这些要求时,我们通常认为使用substr()
方法,和substr()更适合拦截所有的英文字符串。
但只要有
中文字符的字符串,它可能导致PHP截取中文乱码,因为中文UTF-8编码,每个
汉字是3个字节,和GB2312占2个字节,英文占1个字节,截取的数字是不准确的,(在)突然在汉字锯成两半,造成断开后的字符。拉过来一起做的话,那么PHP截取中文乱码。
——得到一些字符串
函数 语法:截取字符串(字符串,起始{,int length })
解释:
substr()返回字符串的字符串的一部分,由
参数指定开始和长度。
如果start是正数,返回的字符串将以字符串的开始字符开头。
例子:
< PHP
$休息= substr(ABCDEF,1); / /收益可分为
休息= substr(美元ABCDEF
>
如果起始为负,返回的字符串将从字符串结尾处的开始单词开始。
例子:
< PHP
$休息= substr(ABCDEF,1); / /返回F
$休息= substr(ABCDEF,2); / /返回EF
休息= substr(美元ABCDEF
>
如果给定参数长度并给出正数,返回的字符串将从开始返回长度字符。
如果有一个给定的参数长度和一个负数,返回的字符串将结束字符串结尾处的长度字符。
例子:
< PHP
休息= substr(美元ABCDEF
>
英语没有问题,我们考汉语。
< PHP
休息= substr(美元中国
>
这个截取字符的结果肯定不是我们想要的结果。PHP截取中文出现乱码可能使程序正常
运行。目前主要有两种
解决方案:
首先,该mb_substr()的mbstring
扩展库拦截不会出现。
你可以使用mb_substr( / mb_strcut)(mb_substr)( / mb_strcut)这个函数,函数的使用()和()(mb_substr)相似的是,在最后的 / mb_strcut加入一个参数来
设置字符串的编码,但一般不需要在php.ini中打开php_mbstring.dll
服务器,在开放的php_mbstring.dll。
< PHP
回声mb_substr(PHP汉字编码
>
如果没有指定最后的编码参数,它将在一个中国是三个字节,这是UTF-8编码的特点。如果我们把UTF-8字符集,我们将拦截一句话。
使用时,你应该注意到PHP
文件和编码的编码当
网页显示。使用此mb_substr方法,我们需要知道编码的字符串之前。如果我们不知道编码,我们需要作出判断。的mbstring库还提供了mb_check_encoding
检查字符串的编码,但它是不完美的。
PHP需要几个字符串截取函数,这是常用的函数和mb_substr.when前
处理在中国,GBK是2个单位的长度,和utf 3长度单位。后者编码后,一个中文长度为1个单位。
有时削减1 / 3在中国或半个中国,并显示乱码,和mb_substr更适合我们使用。但有时mb_substr似乎不太好。比如,我想显示一个小
图片的简要信息,5中国人,超过5的前4在拦截加…以这种方式对待中国是没有问题的,但是它太短暂,处理英文或数字。
二,写自己的拦截
功能,但效率不高的mbstring扩展库。以下是在ECSHOP,截取字符串的UTF-8编码的
作用下。
功能sub_str($str,长度=美元美元,附加= true)
{
美元=修剪($ STR);
strlength美元= strlen(str);
如果(合长度= = $长度| | > = $ strlength)
{
返回长度等于或大于字符串长度,返回字符串本身。
}
($长度)/ /如果截取长度为负
{
美元美元美元strlength +长度= / /所以长度;长度等于字符串的长度减去截距长度
如果(长度<)
{
长度=美元美元strlength; / /如果绝对值大于字符串本身的长度截取长度,截取长度的字符串本身
}
}
如果(function_exists('mb_substr '))
{
纽世达美元= mb_substr($str,$的长度,ec_charset);
}
(function_exists('iconv_substr '))
{
纽世达美元= iconv_substr($str,$的长度,ec_charset);
}
其他的
{
/ / $纽世达= trim_right(substr($str,$长度));
纽世达substr($str =美元,美元的长度);
}
如果(追加$ STR)!= $纽世达)
{
$纽世达=..;
}
返回纽世达;
}
好了,整个故事都到目前为止,我相信它会给你带来一个收获。上面的代码也很简单。有些事我不懂。请给我留言,我会在第一时间给你答复的。