小弟我遇到个这种问题:我的前台有一个查询框(用Php写的,编码格式是GBK),后台数据库的编码格式为UTF-8,现在输入框中输入了汉字,但是到后台中显示的是乱码,这样就无法查询到数据显示在前台了。现在找到的一个方法就是在我的javascript中用encodeURI函数将输入的汉字进行转换,变成十六进制的序列,然后想找一个php的方法将这段序列又转换回去变成汉字。请问怎么做!

解决方案 »

  1.   

    1、用 js 做 url 编码转换时应用 encodeURIComponent 而不是 encodeURI
    只有这样才能将 gbk 转成 utf-8 的 url 串
    服务器端只需 urldecode 就可得到 utf-8 的数据2、假定你使用的是 mysql 数据库
    那么并不需要如此复杂,只需在选择数据库后执行 SQL 指令
    set names gbk
    即可,编码转换的工作将由 mysql 完成
      

  2.   

    在php端用mb_convert_encoding()将编码冲gbk转换为utf-8呢
      

  3.   

    xuzuning,我看错了,我代码利用的就是encodeURIComponent,这个函数解析以后得到的也是十六进制的字符串,我不知道(%ABE%CD)这种格式的数据是否是十六进制的,得到这个以后我想在php代码中将其进行转换,变成汉字!问题就是这样!谢谢各位的参与!
      

  4.   

    不是跟你说了吗?用 urldecode 函数
      

  5.   

    你所说的urldecode只能将Urlencode编过码的数据进行解码!而不能对encodeURIComponent的编码结果进行解析!我做了实验的!请再次解答!
      

  6.   

    encodeURIComponent('这是一个测试');
    得到 %E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B5%8B%E8%AF%95 echo urldecode('%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B5%8B%E8%AF%95');得到 这是一个测试由于你的页面是 gbk 的,所以你看到的应该是
    杩欐槸涓€涓祴璇解码后的数据是可以直接入库的如果你还需要显示或进一步加工,那么需要做编码转换
      

  7.   

    对的,那我入库以后怎么和数据库中的UTF-8数据进行比对呢?
      

  8.   

    谢谢各位了,问题现在已经解决了一半,我知道了在php中如何将UTF-8的数据转换为GBK 的了,就是先使用urldecode方法将由js的encodeURI方法进行编过的代码进行解码,然后在用php的函数mb_convert()方法进行转换,最好在Php中进行输出,但是现在的另外一个问题就是不知道php和js中的数据是如何传递的?因为我要将php中处理好的数据传给js,然后在js中进行查询匹配!继续请教各位大大!
      

  9.   

    谢谢xuzuning的无私帮助了,现在问题已经解决了,主要的解决方法就是按照xuzuning的那种思路,在Js中对获取到的GBK的数据进行解析,然后赋值给一个变量,然后将这个变量通过事先定义好的一个方法来获取到另外一个php页面中进行urldecode和mb_convert-encoding这两个方法变成UTF-8格式的然后在数据库中进行比较,查询出来!现在觉得自己的解决问题能力还有待提高,连项目代码都没消化。好在有各位的帮助!