免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2077 | 回复: 3
打印 上一主题 下一主题

急, 截取字符串时出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-16 23:14 |只看该作者 |倒序浏览
问题, 处理特殊字符时不正确,使用网上的方面也不成功, 下面是代码,但特殊字符没有显示出来,请下载附件。

  1. class string_handler {
  2.                
  3.                 // 1: means the string is utf-8
  4.                 // 0: means the string is gbk/gb2312
  5.                 static $isUtf8 = 1;
  6.                
  7.                 public function __construct(){
  8.                         die("not allow to implement a new object");
  9.                 }
  10.                
  11.                 public static function strlen($str) {
  12.                         return self::$isUtf8 ? strlen(self::mce($str, true)) : strlen($str);
  13.                 }
  14.                
  15. //                public static function strlen2($str) {
  16. //                        return self::$isUtf8 ? iconv_strlen($str, 'utf-8') : iconv_strlen($str, 'gbk');
  17. //                }
  18.                
  19.                 /**
  20.                  * $sta means start offset
  21.                  * $len means length
  22.                  * $del means delimiter
  23.                  */
  24.                 public static function substr($str, $sta, $len, $del = '...') {
  25.                        
  26.                         $str_length = self::strlen($str);
  27.                         $del_length = self::strlen($del);
  28.                        
  29.                         if ($str_length <= $len) {
  30.                                 return $str;
  31.                         }
  32.                        
  33.                         if (self::$isUtf8) {
  34.                                 return self::mce(substr(self::mce($str, true), $sta, $len - $del_length), false) . $del;
  35.                         } else {
  36.                                 return self::mce(self::mce(substr(self::mce(self::mce($str, false), true), $sta, $len - $del_length), false) . $del, true);
  37.                         }                       
  38.                 }
  39.                
  40.                 /**
  41.                  * mb_convert_encoding
  42.                  * @param unknown_type $str
  43.                  * @param unknown_type $isUtf8
  44.                  */
  45.                 private function mce($str, $u2g) {
  46.                         return $u2g ? mb_convert_encoding($str, 'GBK', "UTF-8") : mb_convert_encoding($str, 'UTF-8', "GBK") ;
  47.                 }
  48.         }
  49.        
  50.        
  51.         //test
  52.         header("Content-Type: text/html; charset=utf-8");
  53.         $str = '۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞۞';
  54.         $str1 = 'aaaaaaaaaa你好吗?你好吗?你好吗?a۞۞۞';
  55.         $str2 ='——ゞこ≈—————----ヽ☆——.ヽ☆——..';
  56.         $str3 ='に伴うエンべデッドプレーヤの挙動について · RealNetworks お問い合わせ | サイトマップ ';
  57.         $length = 38;
  58.        
  59.         echo $str . "<BR />";
  60.         echo $str1 . "<BR />";
  61.         echo $str2 . "<BR />";
  62.         echo $str3 . "<BR />";
  63.                
  64.         echo "=================================<br /> <br /> <br /> <br />";
  65.        
  66.        
  67.        
  68.         string_handler::$isUtf8 = 1;
  69.         echo string_handler::substr($str, 0, $length, '...more');
  70.         echo "<br />";
  71.         echo string_handler::substr($str1, 0, $length, '...more');
  72.         echo "<br />";
  73.         echo string_handler::substr($str2, 0, $length, '...more');
  74.         echo "<br />";
  75.         echo string_handler::substr($str3, 0, $length, '...more');
复制代码

[ 本帖最后由 guishoudaoge 于 2008-3-16 23:16 编辑 ]

string_handler.rar

1.11 KB, 下载次数: 10

论坛徽章:
0
2 [报告]
发表于 2008-03-17 14:29 |只看该作者
我自己顶上去

论坛徽章:
0
3 [报告]
发表于 2008-03-17 23:25 |只看该作者
我再顶:em11:

论坛徽章:
0
4 [报告]
发表于 2008-03-18 09:19 |只看该作者
程序太多 你让别人帮你调试么?

如果你先实现 截取的话,有中文 就是高位字符 判断下就好了  不必要写这么长
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP