欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-17 22:02:20
...
解决ThinkPHP中以Get方式提交中文字符乱码

?

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

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

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

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

程序代码
id="search1"
?action="__URL__">
id="group_name"?title="组名查询" class="medium" >
click="getId('group_name').value=encodeURI(getId('group_name').value).replace(/%/g,'.s.');
getId('search1').submit();"class="search imgButton" value="查询" style="impBtn hMargin fLeft shadow" />


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

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



然后我们接收参数查询时要解码:
程序代码
$map['group_name'] = array('like',"%".getChineseGetValue($_GET['group_name'])."%");

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


$Think.get.group_name|getChineseGetValue
}" type="text" name="group_name" id="group_name" title="组名查询" class="medium" >




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

?

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 解决ThinkPHP中以Get模式提交中文字符乱码
  • 专题推荐

    作者信息
    解决ThinkPHP中以Get模式提交中文字符乱码

    认证0级讲师

    推荐视频教程
  • 解决ThinkPHP中以Get模式提交中文字符乱码javascript初级视频教程
  • 解决ThinkPHP中以Get模式提交中文字符乱码jquery 基础视频教程
  • 视频教程分类