当前位置:Gxlcms > PHP教程 > 解决ThinkPHP中以Get模式提交中文字符乱码

解决ThinkPHP中以Get模式提交中文字符乱码

时间:2021-07-01 10:21:17 帮助过:14人阅读

解决ThinkPHP中以Get方式提交中文字符乱码

?

接触thinkPHP还没几天,都还没入门呢,因为公司项目非常着急,自己也对thinkPHP很有兴趣想借机会提高一下,就着急的用thinkPHP开始了,当然是遇到了非常多的问题,不过还好通过朋友gidot的帮助及网络还有官方的手册,基本都解决了。

这几天又遇到个问题,就是GET提交中文会乱码的问题。在论坛看了下好像很多人都有而且也没个好的解决办法。
数据库、页面编码、文件保编码这些全都是UTF8是100%确定没有问题的。
有的人提供的说可行的方法,到我这里也不行,可能是因为我环境是WIDNOWS2003+IIS6.0的默认字符集为中文有关系。试遍了各种方法始终不行。

后来看说客户端base64编码了再发送请求,然后服务器上再BASE64解码。试了下,发现PHP的base64结果居然和JS的不一样-_-|||,后来想,问题是出在传递时的编码上,用base64也只是把字符转换成字母以避免被再次编码解码出现问题。
既然如此,那自己写个简单的编解码应该也能解决,试了下,果然解决了,现在分享一下我的方法。

先给客户端发送出的数据,编码一下,免得传递时被浏览器编码了到服务器出问题,我的解决办法是,发送表单时,先用JS给字符encodeURI编码了,然后将里面的百分号“%”替换成别的不会被编码的字符(注意这个字符要比较特别,不要和用户输入的字符混淆,也不能过长,考虑到一个字符容易和用户输入混淆,我选了3个字符“.s.”,),再让表单发送。具体实现:

程序代码



然后在服务器端写个函数,把我们编码的数据解码成正常的:
程序代码


//解码GET传值
function getChineseGetValue($key){
if (strlen($key)>0){
??return?urldecode(str_replace('.s.','%',$key));
}
}



然后我们接收参数查询时要解码:
程序代码

$map['group_name'] = array('like',"%".getChineseGetValue($_GET['group_name'])."%");



最后在页面显示GET值的时候,也要解码:
程序代码





这样就可以了,希望本帖对有此问题的童鞋能有所帮助,
附带说明下,那个 getId 是我的一个JS函数,偷懒用的(可以不用那么麻烦的老写document.getElementById……),代码如下:
程序代码

function getId(id){
return document.getElementById(id);
}

?

人气教程排行