smarty中英文多编码字符出现乱码如何解决

介绍

这篇文章将为大家详细讲解有关smarty中英文多编码字符出现乱码如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一般网站页面的显示都不可避免的会涉及子字符串的截取,这个时候截断就派上用场了,但是它只适合英文用户,对与中文用户来说,使用截断会出现乱码,而且对于中文英文混合串来说,截取同样个数的字符串,实际显示长度上却不同,视觉上会显得参差不齐,影响美观。这是因为一个中文的长度大致相当于两个英文的长度。此外,截断也不能同时兼容GB2312, utf - 8等编码。

改良的smartTruncate:文件名:modifier.smartTruncate.php
具体代码如下:

& lt; ? php 

函数smartDetectUTF8 ($ string)
{
,,,静态数组$结果=();
,,,如果(!array_key_exists(关键=md5(字符串)美元,美元结果))
,,,{
,,,,,,,美元utf8=?
,,,,,,,,,,,/^ (?:
,,,,,,,,,,,,,,,[\ x09 \ x0A \ x0D \ x20的——\ x7E),,,,,,,,,,,,,,,,,,,,,,,,,,,# ASCII
,,,,,,,,,,,,,,,| [\ xC2 - \ xDF] [\ x80 - \ xBF),,,,,,,,,,,,,,,,,,,,,,,,,,,,# non-overlong 2字节
,,,,,,,,,,,,,,,| \ xE0 [\ xA0 - \ xBF] [\ x80 - \ xBF],,,,,,,,,,,,,,,,,,,,,,#不太长的
,,,,,,,,,,,,,,,| [\ xE1 - \ xEC \ xEE \ xEF] [\ x80 - \ xBF] {2},,,,,,,,,,#直3字节
,,,,,,,,,,,,,,,| \ xED [\ x80 - \ x9F] [\ x80 - \ xBF],,,,,,,,,,,,,,,,,,,,,#不包括代理人
,,,,,,,,,,,,,,,| \ xF0 [\ x90 - \ xBF] [\ x80 - \ xBF] {2},,,,,,,,,,,,,,,,1 - 3 #飞机
,,,,,,,,,,,,,,,| [\ xF1 - \ xF3] [\ x80 - \ xBF] {3},,,,,,,,,,,,,,,,,,,,,,,,,#飞机4-15
,,,,,,,,,,,,,,,| \ xF4 [\ x80 - \ x8F] [\ x80 - \ xBF] {2},,,,,,,,,,,,,,,,,#飞机16
,,,,,,,,,,,) + $/x
,,,,,,,“;
,,,,,,,结果[$ key]=美元preg_match(修剪(美元utf8),字符串美元);
,,,}
,,,返回结果美元(美元关键);
}
函数smartStrlen ($ string)
{
,,,结果=0美元;
,,,(数量=smartDetectUTF8美元字符串)?3:2,
,,,($ i=0;美元我& lt;strlen(字符串)美元;$ +=$字节)
,,,{
,,,,,,,美元字节=奥德(substr(字符串,我美元,1))比;127年?美元数量:1。
,,,,,,,结果+=美元字节比;1 ?1.0:0.5;
,,,}
,,,返回结果美元;
}
函数smartSubstr(字符串,美元开始,美元长度=null)
{
,,,$=& # 39;结果& # 39;& # 39;& # 39;;
,,,(数量=smartDetectUTF8美元字符串)?3:2,
,,,如果美元开始& lt;0)
,,,{
,,,,,,,美元开始=max (smartStrlen开始,美元($ string) + 0);
,,,}
,,,($ i=0;美元我& lt;strlen(字符串)美元;$ +=$字节)
,,,{
,,,,,,,如果(开始& lt;美元=0)
,,,,,,,{
,,,,,,,,,,,打破;
,,,,,,,}
,,,,,,,美元字节=奥德(substr(字符串,我美元,1))比;127年?美元数量:1。
,,,,,,,开始-=美元字节比;1 ?1.0:0.5;
,,,}
,,,如果(is_null(长度)美元)
,,,{
,,,,,,,结果=美元substr(字符串,我美元);
,,,}
,,,其他
,,,{
,,,,,,,美元($ j=我;$ j & lt;strlen(字符串)美元;null

smarty中英文多编码字符出现乱码如何解决