无随机码解的PHP中文字符串截断

无随机码解的PHP中文字符串截断
一个使用良好的字符串侦听功能
功能的子串($str,美元美元开始,长度){ / /更好:字符串
$ = $长度;
如果(长度为< 0){
$str = strrev($str);
$ = $长度;
}
美元($ len len = < strlen(str))$ len:strlen(str);
= $ Javascript;
对于($ i = $开始;$ i $;
{
如果(ORD(substr($str,我,1))> 0xA0)
{
Javascript substr($str =美元,$我,2);
美元+;
{人}
Javascript substr($str =美元,$我,1);
}
}
如果(合长度<0美元= strrev()Javascript Javascript美元);
返回的Javascript;
}
使用方法举例:
$ str1 =我一长串的中文没有英文的;
$ str2 =我一长串的中文和英文;
$ len = strlen($ str1);
$;返回28

$ len = strlen($ str2);
$;返回29

回声';
回波串(str1美元,0, 11);
回声';
回波串($ str2,0, 11);
回声';
回波串(str1美元,16, 28);
回声';
回波串($ str2,16, 29);

结果表明:

二十八

二十九

我是一系列比较

我是一系列比较

中国没有英语

中国与Yingwen
这个函数非常有用,例如,截断一个较长的文件名,但是要在中间添加它。
功能FormatName($str,$大小){
$ len = strlen(str);
如果(strlen(str)> $大小){
第一部分($str =子美元,0美元,大小 / 2);
二美元=子($str,莱恩-美元(美元/ 2美元规模),len);
返回的第一部分。……。二美元;
{人}
返回$ STR;
}
}
另外,在网上看到一个超简单的中文截取解决方案,试用一下,效果不错:

回声substr($ str1,0,10)。Chr(0);
原理说明:

CHR(0)不为空

07null是什么,和CHR的价值(0)为0,表明16是0x00,这意味着二进制为00000000

08虽然Chr(0)不显示任何东西,他是一个性格。

09当汉字被截断时,根据代码规则,他总是不得不把后面的其他字符解释出来,并将其解释为汉字。这是混沌编码的原因,0x81到0xFF和0x00组合总是显示为空

10根据本,CHR(0)是后截取的结果填充,防止发生随机编码。

----------------------------
20120705更新:
以上方法虽然好,但偶尔会有乱码,原因是不深,但你可以用以下方法UTF8字符的文本测试。

注意:在这种方法中,汉字被计算为1个单位长度,一个英文字母和1单位长度,所以要注意定长截断时。

计算长度的方法:

功能strlen_utf8($str)
{
$ len = strlen(str);
$ = 0;
($ i = 0;$ i;
X元= substr($str,我,1);
美元= base_convert(ORD(X),10, 2);
美元= substr(00000000。$,- 8);
如果(substr($,0, 1)= = 0){
} elseif(substr($,0, 3)= = 110){
我= 1美元;
} elseif(substr($,0, 4)= = 1110){
$ I = 2;
}
美元+;
}
返回n;
} / /结束strlen_utf8;
字符串截断函数:
功能substring_utf8($str,美元美元开始,长度)
{
$ len = strlen(str);
数组();
$ = 0;
$ = 0;
($ i = 0;$ i;
X元= substr($str,我,1);
美元= base_convert(ORD(X),10, 2);
美元= substr(00000000。$,- 8);
如果($ $ $开始){
如果(substr($,0, 1)= = 0){
} elseif(substr($,0, 3)= = 110){
我= 1美元;
} elseif(substr($,0, 4)= = 1110){
$ I = 2;
}
美元+;
其他{ }
如果(substr($,0, 1)= = 0){
$ R { } = substr($str,我,1);
} elseif(substr($,0, 3)= = 110){
$ R { } = substr($str,我,2);
$ I = 1;
} elseif(substr($,0, 4)= = 1110){
$ R { } = substr($str,我,3);
$ I = 2;
其他{ }
$ = {;
}
如果(+ + $ M = $长度){
打破;
}
}
}
返回连接($ r);
} / /结束substring_utf8;
使用同样的方法介绍,如FormatName可以实现如下(这是一个小的优化汉字的长度):
功能FormatName($str,$大小){
$ len = strlen_utf8($str);
one_len美元= strlen(str);
大尺寸×1.5美元美元美元Len /($ one_len);
如果(strlen_utf8($str)> $大小){
第一部分substring_utf8($str =美元0美元,,大小 / 2);
二美元= substring_utf8($str,莱恩-美元(美元/ 2美元规模),len);
返回的第一部分。……。二美元;
{人}
返回$ STR;
}
}
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部