当前位置:首页 -> 综合频道 -> 站长之家

PHP处理沥青路面结构图GBK编码下的'..

工作中发现PHP处理GBK格式的生僻字 ‘碶’ 时会遇到的问题。没能深入研究编码层面的原因。不知道是PHP的bug还是GBK编码的锅。如果有大神发现这篇文章欢迎讨论
//1、直接把‘碶’赋值给变量

$str = '碶';

echo $str;//会报500错误

//2、如果‘碶’字后面随便接一个字符或者汉字则不会报错

$str = '碶大';

echo $str;//输出 碶大

//3、var_export查看结果

var_export($str);//输出 '碶\大'

$str = var_export($str, true);

echo $str;//输出 '碶\大'

//4、用PHP字符串处理函数试试

$str = str_replace('\\', '', $str);

echo $str;//输出 '创'

strpos($str, '\\');//结果不为false,能识别出'\'

//5、大家还可以主动在$str = '碶大';字符串中加入'\'试试。测试结果我没记录,也没深入研究

$str = '碶\大';

$str = '\碶大';

$str = '碶大\\';

$str = '碶\\大';

//结论,PHP在GBK下总是能在'碶'字后面识别出反斜杠。如果直接输出打印给浏览器解析浏览器就不会有这个问题

我的解决办法就是,先把变量里的字符串转化成utf-8格式的,在utf-8格式下进行PHP字符串处理,处理之后再转回GBK格式输出

这样也是一种方法:$title=str_replace(str_replace(' ','','碶 '),'契',$title);


分割GBK中文遭遇乱码的解决方法

类似如下的字符串(GBK), explode不能得到正确结果:

1.$result = explode("|", "滕华弢|海青"); 究其原因, 对于”弢”字(读tao,不认识没关系,我也不认识), 因为他的GBK编码值为: 8f7c, 不巧的是, “|”的ASCII值也是7c.

这样的问题, 还有很多 : 因为GBK编码的编码范围是: 0×8140-0xfefe, 所以, 理论上来说, 任何低字节是7c的字都会有这个问题, 比如:

1.倈(827c), 億(837c), 眧(b17c), 鍇(e57c).......等等等等对于这样的情况,

1.第一, 可以采用转码到utf8, 然后explode, 再转回来, 这是比较麻烦的方法.
2.第二, 我们可以采用正则拿"匹配出&qu沥青路面结构图ot;来代替"分离出":
3.preg_match_all("/([/x81-/xfe][/x40-/xfe])+/", $gbk_str, $matches);//写死编码这样, $matches中0号索引对应的数组就是结果词的数组了..




猜你喜欢