PHP GBK编码下生僻字 带来的一些bug

PHP 2019-04-03

今天在一个老项目上往数据库里存“碶”这个字时造成了乱码,最终找到原因如下:

GBK编码中这些生僻字右边有个\,使用下面的代码就可以看出来

<?php
$str = '碶啊';
echo $str;//碶啊
var_export($str);//'碶\啊'
$str = var_export($str, true);
echo $str;//'碶\啊'

然后存入数据库后多了一个\造成了乱码,临时找了个办法可以解决掉这个问题:

<?php
$str = str_replace("\\","\\\\",$str);

后来又发现了个方法也可以解决这个问题,因为这个\在utf-8下不存在
所以转出UTF-8再存入数据库也不会有问题

$sql = iconv("gbk","utf-8",$sql);
mysql_set_charset("utf-8");
mysql_query($sql);

应该还有很多生僻字,比如:芢碶黒匼,大概都会有这个问题


本文由 Jazzy 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论