PHP关于URL参数传递的问题

我们都知道如果数据通过base64编码后可能会含有+号,如果此值要在url中进行传递,则url会自动将+转换成%xx的形式,接收数据方为了能正确的接收数据,有如下两种方法:

1.发送数据前先用base64_encode加密,再用urlencode加密,用urlencode是为了将+等这种字符转换成16进制如%2B,否则php接收参数时自动将+号转换为空格,而此时+号正是我们需要的数据,如果不转换,将会造成数据错误,所以有必要转换一下。

接收数据时就不需要先urldecode了,因为PHP已经自动将%2B转换为+号了,如果再转换,则+就会变成半角空格,此时再base64_decode,数据将是空值,所以这点要注意。

5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9DQrkupTnrJTlrZflnovorqHnrpfmnLrmsYnlrZfovpPlhaXmioDmnK8NCuS6lOeslOWtl+Wei+iuoeeul+acuuaxieWtl+i+k+WFpeaKgOacrw0K5Lit5Zu95YWx5Lqn5YWaDQrkuIDot6/liJvnp5E=

http://www.test2.com/file_process.php?songid=3&attach_filename=&lrc=5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9DQrkupTnrJTlrZflnovorqHnrpfmnLrmsYnlrZfovpPlhaXmioDmnK8NCuS6lOeslOWtl%2BWei%2Biuoeeul%2BacuuaxieWtl%2Bi%2Bk%2BWFpeaKgOacrw0K5Lit5Zu95YWx5Lqn5YWaDQrkuIDot6%2FliJvnp5E%3D

2.发送数据前先用base64_encode,再将基中的+,/,=作相应的转换,接收数据时再作相反的转换就可以了,分别用以下两个函数就可以实现。

function encrypt($str)
    {
        
        $str = str_replace(array('+','/','='),array('-','_','.'),base64_encode($str));
        
        return $str;
    }
    
    function decrypt($str)
    {
       $str = base64_decode(str_replace(array('-','_','.'),array('+','/','='),$str));
        
        return $str;
    }



上一篇: 音乐抓取总结
下一篇: 网站常见的攻击手段
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: php
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1617
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑