免费注册 查看新帖 |

Chinaunix

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

[字符串] 帮我看一下这个函数什么作用utf8_trim [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-06 16:12 |只看该作者 |倒序浏览
  1. function utf8_trim($str) {
  2.     $len = strlen($str);
  3.     for($i=strlen($str)-1;$i>=0;$i-=1){
  4.         $hex .= ' '.ord($str[$i]);
  5.         $ch   = ord($str[$i]);
  6.         if(($ch & 128)==0)    return substr($str,0,$i);
  7.         if(($ch & 192)==192)return substr($str,0,$i);
  8.     }
  9.     return($str.$hex);
  10. }
复制代码

[ 本帖最后由 HonestQiao 于 2006-6-6 21:44 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-06 20:18 |只看该作者
晕,在喜悦村也没人回答,在这也没人回答

论坛徽章:
0
3 [报告]
发表于 2006-06-06 21:01 |只看该作者
当某个字符的ascii字符为
1)小于等于127或者大于等于192时返回substr($str,0,$i);既除掉当前字符到最后字符间的所有字符
2)128~191时继续循环
当没有第1种情况时返回$str.$hex 其中$hex为所有字符的ascii码其中用空格分开着
至于有啥作用还是根据代码中的应用来看比较好

因为跟函数名utf_trim()搭不上边
还有我们使用的字符通常是是小于127的 没必要写这么个函数吧
所以我认为我是错误的

[ 本帖最后由 hacks01 于 2006-6-6 21:30 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-06-06 21:10 |只看该作者
原帖由 115300111 于 2006-6-6 16:12 发表
[code]function utf8_trim($str) {
    $len = strlen($str);
    for($i=strlen($str)-1;$i>=0;$i-=1){
        $hex .= ' '.ord($str[$i]);
        $ch   = ord($str[$i]);
        if(($ch & 128 ...


远看象是utf8截去两端空白的函数...走进一看,感觉又象是rtrim, 截去右端空白的函数...仔细一看截的有点不明不白. ($ch & 12==0 就是说凡位于0-127之间的最后一个字符都要被舍去.
最后想了想,觉得是截去最后一个字符.(详细情况请参考utf8编码规范)

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2006-06-06 21:58 |只看该作者
原帖由 115300111 于 2006-6-6 16:12 发表
  1. function utf8_trim($str) {
  2.     $len = strlen($str);
  3.     for($i=strlen($str)-1;$i>=0;$i-=1){
  4.         $hex .= ' '.ord($str[$i]);
  5.         $ch   = ord($str[$i]);
  6.         if(($ch & 128 ...
复制代码



  1. function utf8_trim($str) {
  2.     $len = strlen($str);
  3.     for($i=strlen($str)-1;$i>=0;$i-=1){
  4.         $hex .= ' '.ord($str[$i]);
  5.         $ch   = ord($str[$i]);
  6.         if(($ch & 128)==0)    return substr($str,0,$i);
  7.         if(($ch & 192)==192)return substr($str,0,$i);
  8.     }
  9.     return($str.$hex);
  10. }
复制代码


第一:代码有一些不规范,$hex没有做过初始化,而且$hex从变量名称来说,应该是16进制数,而这里是字符串了。
第二:($ch & 128 ) ==0,这个表示如果为普通英文符号(0~127)
第三:($ch & 192)==192,这个192的16进制为0xc0,这个在工业协议之中很常见,Unicode编码也很常见,QQ的协议据说用了,是表示一段通讯内容的结束标志
第四:从上可知:如果检测到一个普通英文字符,则返回截取的字符串
   如果检测到通讯内容结束字符串,也返回截取的字符串
   否则的话,应该算是补全了到两位,因为是空格和当前字符的ascii。
   具体作用不好说,没有看到上下文应用场合。

[ 本帖最后由 HonestQiao 于 2006-6-6 22:24 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-06-06 22:16 |只看该作者
$a="aA";
$b=utf8_trim($a);
echo $a."<br>";
echo $b;
----------------------
输出的结果为:
aA
a

若$a="aA\n"时就会输出
aA
aA
请问为什么会出现这样的情况呢?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
7 [报告]
发表于 2006-06-06 22:27 |只看该作者
难道这样子的结果,有什么奇特之处么?

论坛徽章:
0
8 [报告]
发表于 2006-06-06 22:51 |只看该作者
呵呵...刚才那贴是在版主发贴之前看的...有点不是很理解而已!!!

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
9 [报告]
发表于 2006-06-06 22:53 |只看该作者
现在明白了么》

论坛徽章:
0
10 [报告]
发表于 2006-06-06 23:11 |只看该作者
是PHPWind 4.3.2 global.php中的一段代码,我还是搞不懂他有什么作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP