这篇文章主要介绍了php无乱码切割中文字符的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
在php中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而字符串的子串的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在utf - 8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节。
直接使用php函数substr截取中文字符可能会出现乱码,主要是字符串的子串可能硬生生的将一个中文字符“锯成两半。解决办法:
<强> 1,使用mbstring扩展库的mb_substr截取就不会出现乱码了。强>
<强> 2,自己书写截取函数,但效率不如用mbstring扩展库来得高。强>
<强> 3,如果仅是为了输出截取的串,可用如下方式实现:substr (str美元,0,30).chr(0)。强>
<代码> substr() 代码>函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用<代码> mb_substr() 代码>/<代码> mb_strcut 代码>这个函数,mb_substr ()/mb_strcut的用法与substr()相似,只是在mb_substr ()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开<代码> php_mbstring.dll> 代码,需要在php . ini中在把php_mbstring。dll打开。
举个例子:
& lt; php ? 回声mb_substr(& # 39;这样一来我的字符串就不会有乱码^ _ ^ & # 39;,0,7日& # 39;utf - 8 # 39;); 比; 输出:这样一来我的字 php & lt; ? 回声mb_strcut(& # 39;这样一来我的字符串就不会有乱码^ _ ^ & # 39;,0,7日& # 39;utf - 8 # 39;); ?在
输出:这样一
从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。
<强> PHP实现中文字串截取无乱码的方法强>
函数GBsubstr(字符串,美元开始,长度美元){ 如果(strlen(字符串)美元在美元长度){ 美元str=零; len=$ +开始美元长度; (i=美元开始;i<美元;len美元;美元我+ +){ 如果(奥德(substr(字符串,我美元,1))在0 xa0) { str美元。=substr(字符串,我美元,2); 美元我+ +; 其他}{ str美元。=substr(字符串,我美元,1); } } 返回$ str强生# 39;……& # 39;; 其他}{ 返回字符串美元; } }
<>强实现中文字串截取无乱码的方法,适用于utf - 8 强>
函数substr_text (str,美元开始=0,长度,美元$ charset=皍tf-8", $后缀=啊? { 如果(function_exists (“mb_substr")) { 返回mb_substr (str,美元开始,长度,美元字符集)。美元后缀; } elseif (function_exists (& # 39; iconv_substr& # 39;)) { 返回iconv_substr (str,美元开始,长度,美元字符集)。美元后缀; } $再保险[& # 39;utf - 8 # 39;]=?[\ x01 - \ x7f] | [\ xc2 - \ xdf] [\ x80 - \ xbf] | [\ xe0 - \ xef] [\ x80 - \ xbf] {2} | [\ xf0 - \ xff] [\ x80 - \ xbf] {3}/?; $再保险[& # 39;gb2312 # 39;]=?[\ x01 - \ x7f] | [\ xb0 - \ xf7] [\ xa0 -以\ xfe]/?; $再保险[& # 39;gbk # 39;]=?[\ x01 - \ x7f] | [\ x81 -以\ xfe][以——\ \ x40 xfe]/?; $再保险[& # 39;繁体# 39;]=?[\ x01 - \ x7f] | [\ x81 -以\ xfe] ([\ x40 - \ x7e] | \ xa1 -以\ xfe])/?; preg_match_all (re(字符集)美元,美元str, $匹配); 片=加入美元(““,array_slice(匹配[0],美元开始,长度)美元); 返回片。美元后缀; }
感谢你能够认真阅读完这篇文章,希望小编分享php无乱码切割中文字符的方法内容对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,遇到问题就找,详细的解决方法等着你来学习!