免费注册 查看新帖 |

Chinaunix

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

如何转换成汉字? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-28 18:53 |只看该作者 |倒序浏览
您的网上客服业务受理或详单查询的二次鉴权密码为:331680,30分钟内可以使用该密码办理业务或查询详单。
上面直接显示汉字了 ,具体看附件图。


这是什么格式的字符?怎么转换成汉字?用什么函数?

[ 本帖最后由 anen 于 2007-11-28 18:59 编辑 ]

未命名.jpg (32.1 KB, 下载次数: 47)

未命名.jpg

论坛徽章:
0
2 [报告]
发表于 2007-11-28 21:50 |只看该作者
顶一下,期待高手出现.嘻嘻.

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2007-11-28 23:03 |只看该作者

  1. $str = phpUnescape("您的");
  2. echo($str);

  3. function phpUnescape($str)
  4. {
  5.     $str = rawurldecode($str);
  6.     preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U", $str, $regs);
  7.     $ary = $regs[0];
  8.     foreach($ary as $k => $v)
  9.     {
  10.         if (substr($v, 0, 2) == "%u")
  11.         {
  12.             $ary[$k] = iconv("UCS-2", "GB2312", pack("H4", substr($v, -4)));
  13.         } elseif (substr($v, 0, 3) == "&#x")
  14.         {
  15.             $ary[$k] = iconv("UCS-2", "GB2312", pack("H4", substr($v, 3, -1)));
  16.         } elseif (substr($v, 0, 2) == "&#")
  17.         {
  18.             $ary[$k] = iconv("UCS-2", "GB2312", pack("n", substr($v, 2, -1)));
  19.         }
  20.     }
  21.     return join("", $ary);
  22. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2007-11-29 09:05 |只看该作者
上面的这段代码 我的运行结果是     “葶”

PHP Notice:  iconv(): Detected an illegal character in input string in /var/www/html/sms.php on line 17

论坛徽章:
0
5 [报告]
发表于 2007-11-29 15:22 |只看该作者
乔版的应该是可以的。

要不试试这个,根据网上例程改的:


  1. <?php

  2. function decode_unicode_url($str, $mark='&#x')
  3. {
  4.   if($mark == '&#x')
  5.   {
  6.     $patterns[0] = "/&#x(....);/";
  7.     $patterns[1] = "/&#x(..);/";
  8.     $replacements[0] = "%u\$1";
  9.     $replacements[1] = "%u00\$1";
  10.     $str =  preg_replace($patterns, $replacements, $str);
  11.   }
  12.   $res = '';
  13.   $i = 0;
  14.   $max = strlen($str) - 6;
  15.   while ($i <= $max)
  16.   {
  17.     $character = $str[$i];
  18.     if ($character == '%' && $str[$i + 1] == 'u')
  19.     {
  20.       $value = hexdec(substr($str, $i + 2, 4));
  21.       $i += 6;
  22.       
  23.       if ($value < 0x0080) // 1 byte: 0xxxxxxx
  24.         $character = chr($value);
  25.       else if ($value < 0x0800) // 2 bytes: 110xxxxx 10xxxxxx
  26.         $character =
  27.             chr((($value & 0x07c0) >> 6) | 0xc0)
  28.           . chr(($value & 0x3f) | 0x80);
  29.       else // 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx
  30.         $character =
  31.             chr((($value & 0xf000) >> 12) | 0xe0)
  32.           . chr((($value & 0x0fc0) >> 6) | 0x80)
  33.           . chr(($value & 0x3f) | 0x80);
  34.     }
  35.     else
  36.       $i++;

  37.     $res .= $character;
  38.   }

  39.   return $res . substr($str, $i);
  40. }

  41. ?>

  42. Simple test with Chinese characters,
  43. combined with urldecode:
  44. <br/>
  45. <?php

  46. $str = decode_unicode_url('您的网上客服业务受理或详单查询的二次鉴权密码为:&#x33;&#x33;&#x31;&#x36;&#x38;&#x30;,&#x33;&#x30;分钟内可以使用该密码办理业务或查询详单。');

  47. print(mb_convert_encoding(urldecode($str), "gbk", "euc-cn, utf-8, gbk") . '<br/>');
  48. ?>
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-11-30 08:19 |只看该作者
是不是要装中文字符集?


  1. [root@cat test]# loca
  2. local      locale     localedef  locate     
  3. [root@cat test]# locale
  4. locale     localedef  
  5. [root@cat test]# locale
  6. LANG=en_US.UTF-8
  7. LC_CTYPE="en_US.UTF-8"
  8. LC_NUMERIC="en_US.UTF-8"
  9. LC_TIME="en_US.UTF-8"
  10. LC_COLLATE="en_US.UTF-8"
  11. LC_MONETARY="en_US.UTF-8"
  12. LC_MESSAGES="en_US.UTF-8"
  13. LC_PAPER="en_US.UTF-8"
  14. LC_NAME="en_US.UTF-8"
  15. LC_ADDRESS="en_US.UTF-8"
  16. LC_TELEPHONE="en_US.UTF-8"
  17. LC_MEASUREMENT="en_US.UTF-8"
  18. LC_IDENTIFICATION="en_US.UTF-8"
  19. LC_ALL=
复制代码



windows下面测试成功了,代码没错。linux下还有问题,我在看看。

[ 本帖最后由 anen 于 2007-11-30 08:39 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-11-30 13:21 |只看该作者
首先确定iconv扩展有没有装

论坛徽章:
0
8 [报告]
发表于 2007-11-30 14:38 |只看该作者
见附件。

未命名.jpg (26.54 KB, 下载次数: 42)

未命名.jpg

论坛徽章:
0
9 [报告]
发表于 2007-11-30 14:41 |只看该作者
见附件。

未命名.jpg.jpg (92.47 KB, 下载次数: 40)

未命名.jpg.jpg

论坛徽章:
0
10 [报告]
发表于 2007-11-30 19:14 |只看该作者
用libiconv库看看

iconv implementation         "libiconv"
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP