免费注册 查看新帖 |

Chinaunix

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

[字符串] php里把全角符号转成半角符号的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-06 15:34 |只看该作者 |倒序浏览
php里把全角符号转成半角符号的问题
我的要求就是标点符号和全角的英文字符转成半角的.中文字不改变.不知道那位高手可以实现
以前版主提供下面这个方法不是很好用.因为加上中文字后就乱掉了.
$str = "0123ABCDFWS\",.?<>{}[]*&^%#@!~()+-|:;";
echo "$str";
echo "<br>";
$str = preg_replace('/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $str);
echo $str;

[ 本帖最后由 HonestQiao 于 2005-12-6 18:25 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-06 17:21 |只看该作者
要我就一个个替换了 汗 累死了~ 哈哈

论坛徽章:
0
3 [报告]
发表于 2005-12-06 17:41 |只看该作者
太累,而且不太实际

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2005-12-06 18:25 |只看该作者

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2005-12-06 18:26 |只看该作者
原帖由 pandagao 于 2005-12-6 17:41 发表
太累,而且不太实际



你可以把他们的范围取出来,然后替换一定范围之内的。

论坛徽章:
0
6 [报告]
发表于 2005-12-06 20:28 |只看该作者
这个程序因为会把前一个汉字的后一个字节和后一个汉字的前一个字节组成一个新的"汉字或者符号"进行替换,所以会乱码,你可以想办法检查一下避免这种情况,具体的程序我现在也找不到了.

论坛徽章:
0
7 [报告]
发表于 2005-12-06 21:54 |只看该作者
原帖由 HonestQiao 于 2005-12-6 18:25 发表
http://bbs.chinaunix.net/viewthread.php?tid=658561

你这个贴我看过了.问题是这样的话会有很多要列举出来.
我的意思.就是有没有一种方法.可以向我提到的那样.用正则表达式写出来.

论坛徽章:
0
8 [报告]
发表于 2005-12-06 22:42 |只看该作者
上面的程序,在混合汉字时出问题,应该是6楼说的原因

上面那个正规表达式也是根据那些符号的是有一定规律的,半角=全角-128

那其他符号呢?你怎么处理?一些符号是半角里没有的

也就是说,是有限个的,而且还很少,直接替换是实际应用中最好的解决方法了

你要不得加上一个 判断汉字范围+使用那个正则表达方式,不过已经失去了那条正则表达方式轻便的意思

自己掂量一下吧

[ 本帖最后由 wobushiwo 于 2005-12-6 23:09 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2005-12-06 23:07 |只看该作者
纯属好玩,无效率保证


  1. $str = preg_replace('/([\x80-\xFF])([\x80-\xFF])/xe', '(ord(substr(\1,0,1))==163&&(ord(substr(\2,1,2))>=161||ord(substr(\2,1,2))<=254)?chr(ord(\2)-0x80):\1\2)', $str);
复制代码

[ 本帖最后由 wobushiwo 于 2005-12-6 23:34 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP