php 里的 "+" 号 被urlencode 编码后,
再用 urldecode 解码,变成了 ' ' ,即空的,也不知道是空格还是空,我看起来像是空格,总之就不是原来的 '+' 号了,我应该怎么解决才能得到原来的 + 号?

解决方案 »

  1.   

    是吗?不要想当然的说echo $s = 'abc+123 xyz';
    echo '<br />';
    echo $s = urlencode($s);
    echo '<br />';
    echo urldecode($s);
    abc+123 xyz
    abc%2B123+xyz
    abc+123 xyz
      

  2.   

    我测试也出现这种情况:#发送页面
    $param = "1+1";
    echo urlencode($param)."<br>";
    #1%2B1
    header("Location:./test17.php/?can=".urlencode($param));
    #http://path/test/test_csdn/test17.php/?can=1%2B1#接收页面
    if(isset($_GET['can'])){
    echo urldecode($_GET['can']);
    }
    #1 1
      

  3.   

    web 服务器会默认做一次 url 解码
    传递到 php 时,已经变成 ?can=1+1 了
    如果你再做一次 url 解码,当然就不对了!
      

  4.   

    果然:#接收页面
    if(isset($_GET['can'])){
    echo urldecode($_GET['can']);  #1 1
    echo $_GET['can']; #1+1
    }理解了,感谢!!!
      

  5.   


    你意思是 不用 urldecode 解码? 那被 urlencode 的就是一串 %号 和数字组成的乱码!!
      

  6.   

    我刚才试了下,好像是的,我晕了那 urldecode 有啥J8用?
      

  7.   

    可是为啥对中文的情况下,如果不用 urlencode 再 urldecode 就可能有乱码?
      

  8.   

    经测试,中文也正常啊:#发送页面
    $param = "abc+速度";
    echo urlencode($param)."<br>";
    #abc%2B速度
    header("Location:./test17.php/?can=".urlencode($param));#接收页面
    if(isset($_GET['can'])){
    #web 服务器会默认做一次 url 解码
    echo urldecode($_GET['can']);  #abc 速度
    echo $_GET['can']; #abc+速度
    }
      

  9.   

    那这个urldecode 函数有啥用?
      

  10.   

    那看你的需求了,现在你是发送和接收一起做,所以不考虑。但是,如果只给你一个借口或直接给你一个网址呢?如:
    http://localhost/path/test/test_csdn/test17.php/?can=abc%2B%E9%80%9F%E5%BA%A6
    这时就需要urldecode()解码了