+ -
当前位置:首页 → 问答吧 → php 编码遇到的问题

php 编码遇到的问题

时间:2011-09-27

来源:互联网

|中国人|

两个竖线中间第一个汉子是一个特殊符号。

utf-8 gbk 编码转换总是会出现问题?

有哪位大拿遇到过这个问题?

作者: nksurvive   发布时间: 2011-09-27

具体的代码是什么?帖出来让大家帮你看看吧

作者: yagas   发布时间: 2011-09-27

<?php
$str="中国人";


echo $str2=mb_convert_encoding($str,"GBK","UTF-8");

这个代码保存为 utf8编码的文本文件,然后运行

会出现: ?中国人

第一个特殊字符已经丢失。





问题的场景出现在: web页面用ajax提交数据的时候,ajax默认会对数据进行 encodeURIComponent 编码,
encodeURIComponent编码会将字符转成 utf-8,

而环境是gbk的,所以需要将字符从 utf-8转成 gbk, 导致特殊符号出现问题。

不知道其他兄弟有没有遇到过?

作者: nksurvive   发布时间: 2011-09-27

直接用utf-8编码,不转码。
文件用utf-8
header("content-type:text/html;charset=utf-8");也用utf-8不行么

作者: ohmygirl   发布时间: 2011-09-27

$str="中国人";
这个是什么情况? 是ajax提交上来就这样了?

作者: yhkyo   发布时间: 2011-09-27

如果都是utf8 不会遇到这个问题。


ajax后提交的内容是 $str="%EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA";

可以看到这个有 12个字节,每个汉子三个字节,所以已经转成了 utf-8,

要想再转成 gbk 就出问题了。

作者: nksurvive   发布时间: 2011-09-27

为什么一定要转换成gbk呢?
给我个理由先。

作者: ohmygirl   发布时间: 2011-09-27

历史原因,数据库使用的gbk

引用 6 楼 ohmygirl 的回复:

为什么一定要转换成gbk呢?
给我个理由先。

作者: nksurvive   发布时间: 2011-09-27

那你从DB中拿出数据后先转成正常的再用,
encodeURIComponent();//里面的东东正码先是正确的码编,不要在之前已经出错了

作者: yhkyo   发布时间: 2011-09-27

用gb2312编码貌似可以,你可以试试。

作者: ohmygirl   发布时间: 2011-09-27

<?php
$str="%EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA";
echo $str."=>";
$str = mb_convert_encoding(urldecode($str), "gb2312","utf-8");
echo $str;

echo "<br/>";
echo $str."=>";
$str = mb_convert_encoding( $str,"utf-8","gb2312");
echo urlencode($str);
?>

作者: yhkyo   发布时间: 2011-09-27

%EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA=>珑中国人
珑中国人=>%E7%8F%91%E4%B8%AD%E5%9B%BD%E4%BA%BA

作者: yhkyo   发布时间: 2011-09-27

 变成了 珑

所以错误了

作者: nksurvive   发布时间: 2011-09-27

前后的 urlencode 也不一致了

引用 11 楼 yhkyo 的回复:

%EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA=>珑中国人
珑中国人=>%E7%8F%91%E4%B8%AD%E5%9B%BD%E4%BA%BA

作者: nksurvive   发布时间: 2011-09-27

这个原始字符串应该不是完整的,如果可以的话你用客户端去DB中查查看

作者: yhkyo   发布时间: 2011-09-27

相关阅读 更多