?
接触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值的时候,也要解码:程序代码这样就可以了,希望本帖对有此问题的童鞋能有所帮助,附带说明下,那个 getid 是我的一个js函数,偷懒用的(可以不用那么麻烦的老写document.getelementbyid……),代码如下:程序代码function getid(id){return document.getelementbyid(id);}?
