地址栏的参数是tag=%B1%BE%816%A61%C0%AD%B5%C7
实际上是 'tag=本•拉登'
很明显这是gb编码的echo iconv('GBK','UTF-8',urldecode('%B1%BE%816%A61%C0%AD%B5%C7'));
echo mb_convert_encoding(urldecode('%B1%BE%816%A61%C0%AD%B5%C7'),'UTF-8','GB2312');
这样都不行!其实 也就是中间的那个 %816%A61   • 这个点没有转好!
郁闷死了。求大神指教。

解决方案 »

  1.   

    urldecode('%B1%BE%816%A61%C0%AD%B5%C7') 这个解码之后为什么是GBK编码的呢?你让它解了之后是UTF-8的就不用转码了啊,改下你编辑器和浏览器的编码。改为UTF-8。
      

  2.   

    ......<?php
    echo iconv('GB18030','UTF-8',urldecode('%B1%BE%816%A61%C0%AD%B5%C7'));
    ?>
      

  3.   

    gb编码是 一个汉字 有2个%+16进制的  utf的不是3个么?  重点不在这里,是我现在不能把中间的那个•字符转过来。
    比如现在的这个 %B1%BE 就是个本字啊!
    我的文件编码 和 浏览器都是utf-8的。
    我说的gb是 本•拉登 encode之后的 %B1%BE%816%A61%C0%AD%B5%C7
      

  4.   


    +++你这个“点”不在gbk/gb2312编码范围内
      

  5.   

    感谢2楼和5楼点醒了我。
    还有一个问题 我怎么知道url上过来的是什么编码呢?
    mb_check_encoding 用这个吗?
      

  6.   

    我用mb_detect_encoding 这个函数
    输入汉字的时候 地址栏输入汉字的时候,接收到的参数  显示是utf-8的
    如果输入0-9  a-z A-Z这样的  编码显示ascii 
    但是 如果输入特殊些的 如日文 或者昨天的 本•拉登 mb_detect_encoding 这个函数就得不到结果了。
      

  7.   

    你是什么浏览器 如果是OPERA他中文在地址栏本身就是乱码 不用转码。
      

  8.   

    既然你要如此复杂,那就复杂一点吧
    你可以先把需要传递的内容使用自定义的加密函数加密一下再传递,然后传递完接收之后再解密回原来的内容就行了,这就不存在编码问题了.
    我记得这个加密解密的函数在discuz的程序里边有,你可以找找看
      

  9.   

    我测试了一下,发现可以直接传递中文,我的做法是:
    1,用editplus新建php文件,保存的时候文件编码一定要选择utf8
    2,该php的文件头也要设置为utf8,即
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    这样在地址栏传参数的时候就可以是中文不乱码了.