Heim > Backend-Entwicklung > PHP-Tutorial > 解决ThinkPHP中以Get模式提交中文字符乱码

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

WBOY
Freigeben: 2016-06-13 13:09:06
Original
1084 Leute haben es durchsucht

解决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);
}

?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage