本帖最后由 default7 于 2011-05-25 22:05:57 编辑

解决方案 »

  1.   

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

  2.   

    这样做是为了SEO,把关键词写在网址里面重写,如果加密……
      

  3.   

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

  4.   

    那是浏览器的设置大部分浏览器,都可设置,url参数默认编码,,通常默认为utf-8程序处理,你可以判断下字符是否是所期待的编码,否则转换一下
      

  5.   


    我的网页文档编码是UTF-8,数据库连接是UTF8,但是就是接收不了。
    最后在接收的地方用mb_convert_encoding 才可以了。
    但是我另外一个程序却可以直接用urldecode来获取就可以了。DeDeCMS的/tags.php文件,tags.php?tag=中国人民解放军 这样直接输入这样带中文的网址就解码不了。
      

  6.   

    大哥,您就先将汉字转化成url编码。 然后再转换回来就不会了
      

  7.   

    你用chrome试一下,试完之后你就知道是跟浏览器的机制有关的或者这样说:你的中文在哪里输入,就跟输入框本身的编码机制相同
      

  8.   

    %D6%D0%B9%FA%C8%CB%C3%F1%BD%E2%B7%C5
    就是 gbk 编码的 中国人民解放军 的 url 编码如果你是在地址栏键入 kw.php?kw=中国人民解放军
    那么很正常,因为你总是在使用简体中文版操作系统如果这个 url 是写在程序文件中的,那么请核查该文件是否确被以 utf-8 编码保存了
      

  9.   


    ……
    真的是出鬼了。
    本地服务器localhost的直接urldecode就可以了,但是远程的却不行。但是我另外一个网站的却是可以直接用urldecode来接收就可以了的。是这样,a.php里面有一个连接 是 <a href="tags.php?tag=%D6%D0%B9%FA%C8%CB%C3%F1%BD%E2%B7%C5%BE%FC">中国人民解放军</a>,但是在 tags.php里面却
    (1)远程服务器里面:用urldecode 得到的tag参数还必须换成 UTF-8编码的转码一次。
    (2)本地localhost里:直接用urldecode 就可以得到tag参数的值,无需转码。另外我发现这些编码都被变成了GB系列的URLENCODE编码,很奇怪的。
      

  10.   

    (1)远程服务器里面:用urldecode 得到的tag参数还必须换成 UTF-8编码的转码一次。被接收的URL系统是否GBK  ,远程服务器是否UTF-8;这样可能出现乱码(2)本地localhost里:直接用urldecode 就可以得到tag参数的值,无需转码。本地编码环境一致
      

  11.   

    首先,url 编码的转换默认是浏览器和web服务器的工作,并不需要人工干预你在程序或地址栏写入 kw.php?kw=中国人民解放军
    虽然你看到地址栏中是 url 编码, 但在 kw.php 中 echo $_GET['kw']; 依然是 中国人民解放军
    除非你显式的使用 urlencode 进行编码,接收时才需要用 urldecode 解码如果你在程序中写入
    <a href="tags.php?tag=%D6%D0%B9%FA%C8%CB%C3%F1%BD%E2%B7%C5%BE%FC">中国人民解放军</a>
    那么,无论你的程序文件使用什么语言编码,接收到的只是 gbk 编码的 中国人民解放军
      

  12.   


    是的,很奇怪。远程的里面这个加密的urlencode 都是自动成了GBK系列的。但是我的本地不是的。
    本地的是直接urlencode ,看的是文件的编码是UTF-8还是ANSI。
    这个是否和远程主机有关系呢?远程是linux 系统 Apache 的。
    我本地 WIN XP ,Apache 系统的。
    环境是否是UTF-8,这个是如何看啊,在哪里设置。我也觉得是跟配置环境有关系。
      

  13.   

    用FF下的HTTPFOX,IE的httpwatch都能看到字符集!自己的本地端还看浏览器的默认编码,查看字符编码里面就能显示,最新的FF4。1版本默认就是UNICODE字符编码,而其他浏览器未必一样!
      

  14.   


    1.%D6%D0%B9%FA%C8%CB%C3%F1%BD%E2%B7%C5%BE%FC 本来就是gb编码(实际应该说ansi)2.服务器有预定义字符集的,只能说你的localhost预定义gbk或者默认跟系统一样,远程那个不是,像我用的免费空间预定义是ISO-8859-1...
      

  15.   

    我一般都是显示的url编码,接收时候在转回来
      

  16.   


    …… 我可能越描述越乱了。涉及主机:(1)本地主机站点LOC,(2)远程主机站点FTP
    涉及文件:
    (1)a.php [里面有一个连接连接到b.php的,该连接的网址中带的参数中包含中文]
    (2)b.php [里面有接收来自a.php的传递过来的参数,要求输出本来的传递值]出现问题,必须如下情况才可以让b.php接收成功来自于a.php的值:
    (1)本地情况 <?
    // a.php内容 
    $str = '中国人民解放军';
    echo '<a href="b.php?tag='.urlencode($str).'">'.$str.'</a>';
    ?><?php 
    //b.php 使用如下可以接收到a.php传递过来的值
    $str = urldecode( trim($_GET["tag"]) );
    ?>(2)远程情况<?
    // a.php内容 
    $str = '中国人民解放军';
    echo '<a href="b.php?tag='.urlencode($str).'">'.$str.'</a>';
    ?><?php 
    //b.php 使用如下可以接收到a.php传递过来的值,必须转码才行
    $str = urldecode( trim($_GET["tag"]) );
    $str = mb_convert_encoding($str,"UTF-8","GBK");?>然后本地和远程里面a.php 里面出来的urlencode的值都是一样的。
      

  17.   

    因为 a.php 是 ansi 保存的
      

  18.   

    a.php 和 b.php 本地远程都是 以 “UTF-8 NONE  BOM HEADER”保存的。
      

  19.   

    兄弟糾結了半年了還在糾結?答案就在你的條件裏
    远程是linux 系统 Apache 的。
    我本地 WIN XP ,Apache 系统的。我曾經在以前碰過,兩臺服務器,一臺linux 一臺win,一樣是編碼問題 然後需要不同的處理。具體應該是跟系統的字符集什麼的有關,上面有人說了。
      

  20.   

    机器是不会骗人的。不会见鬼,只是见bug.
    让你们管运维的。把这个配置去了就行。
    AddDefaultCharset UTF-8