PHP全角标点转为半角
PHP全角标点转为半角
<?php
$str = "0123ABCDFWS\",.?<>{}[]*&^%#@!~()+-|:;";
echo "$str";
echo "<br />";
$str = preg_replace('/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $str);
echo $str;
?>
$str = "0123ABCDFWS\",.?<>{}[]*&^%#@!~()+-|:;";
echo "$str";
echo "<br />";
$str = preg_replace('/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $str);
echo $str;
?>
这是网上看来的代码,最初我想着,反正标点就那么多,直接用数组啥的替换一下就完事了。看了这个函数之后,发现自己了解的太少了。或者说自己的思路太狭隘了,从没有往深处这么想。看来所有的中文标点的第二个字节减去0X80(即128)所得的数字就是半角所得的数字了。而/e模式表达的是:如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
很好很强大
用你的代码测试了下,如果php文件用utf-8编码的话这个函数就无效了