PHP对特殊字符处理:
1.因为PHP处理的时候, 采用的是操作系统内码,如果是非 unicode编码的系统,比如XP中文版本,有些PHP代码就无法处理:
<?
echo "誠";
?>
可能因为诚的编码最后一位里面有转义字符:\ (D55C) 刚好,ASCII里面\正好也是(5c)
所以这种问题,只会出现在字符串最后一位的时候,
如果是mysql从数据中取出的数据呢,就不大会存在这种问题,
如果要存入数据库呢,我们可以这样做
<form name="f" method=POST action="">
<input type=text name=a>
<input type=submit name=c>
</form>
<?
include 'XXX.php';
$sql=new mysql_('test');
if(!empty($_POST['a'])) {
$aa = $_POST['a'];
if (get_magic_quotes_gpc()) {
$aa = stripslashes($aa);
} else {
}
$aa=mysql_escape_string($aa);
echo ("INSERT INTO admin(c_name,c_pass) value('$aa','$aa')");
$sql->query("INSERT INTO `admin`(i_id,c_name,c_pass) values(NULL,'$aa','$aa')");
}
>
Json的PHP解析处理,
因为JSON数据本身来讲,跟编码是没有关系的,但是不幸的是,跟PHP解析扯上勾了,所以必须要有一些改进。
可以json_decode的时候,可以先把字符转成utf-8
echo iconv("GBK","UTF-8",$a);
但有时有点特殊字符iconv会中断,比较可恨:点这里
所以需要用宽字符集
echo mb_convert_encoding($a,"UTF-8","GBK");
但还是会有点特殊字符解析不正确
$a="aaaaaaaaaaaaaa";
//echo iconv("GBK","UTF-8",$a);
echo mb_convert_encoding($a,"UTF-8","GBK");