php中url传递中文字符,特殊危险字符的解决方法


Posted in PHP onAugust 17, 2013

我们需要在url中传递中文字符或是其它的html等特殊字符,似乎总会有各种乱,不同的浏览器对他们的编码又不一样,

对于中文,一般的做法是:

把这些文本字符串传给url之前,先进行urlencode($text)一下;

但是对于一些很“危险”的字符,比如说html字符,甚至是SQL注入相关的字符,如果很明显的传给系统,出于安全考虑,系统一般都会把它们过滤掉的。

现在,我们需要这些危险字符,该这么办?

我想到的办法是 先给它们 base64_encode($text) 编码,到服务端时,又给它们 base64_decode($text) 解码,

貌似很完美,但是在使用的过程中又遇到一个问题,base64_encode 编码后的字符串中含有 "/", "+", "=" 等字符,

base64_encode()函数由于要在url中传用户输入观点(少量的内容),当用户提交(post提交)过来的是一个数组.所以我把观点用bse64_encode()函数给加密.当跳转到处理页面时,我再给get接收,这时出现两边加密的数据不对.少了一个+字符.

用户提交加密:

tPK9tNPNyKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz+vI69ehsKEhfHw=

在处理页面用get接收到的:

tPK9tNPNyKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz vI69ehsKEhfHw=

对比找到少了一个加号,不知道是什么原因导制的(猜想可能是get时,+字符可能不能得到吧!).还请高手指点.

这些字符在url编码中又是特殊字符,比如 "+" ,它就表示 “空格”,但是不同的浏览器对“空格”的编码又不一样,有的是用“+”表示,有的是用“20%”表示,也就是说,让这些base64_encode编码后的字符串在url中传递,用不同的浏览器去浏览时,服务端得到值不一样。

于是乎,想到了一个折中办法,先将这些base64编码后的特殊字符替换掉,到服务端后,又替换回来:

解决方法:

一.在用户提交加密串的时间,我把+字符给换成别的字字符.如:str_replace('+', '_', $content);
二.在处理页面再次转换一次:如:str_replace('_', '+', $content);

function base_encode($str) {
        $src  = array("/","+","=");
        $dist = array("_a","_b","_c");
        $old  = base64_encode($str);
        $new  = str_replace($src,$dist,$old);
        return $new;
}function base_decode($str) {
        $src = array("_a","_b","_c");
        $dist  = array("/","+","=");
        $old  = str_replace($src,$dist,$str);
        $new = base64_decode($old);
        return $new;
}

下面是在浏览器中得到的效果

xOO6w6Osuf65_aiy_atL_b00Ke5_b8jnus6ho6GjoaM_c

urldecode实例方法很简单

urldecode ( string $str )
解码给出的已编码字符串中的任何 %##。返回解码后的字符串。

Example #1 urldecode() 例子

<?php
$a = explode('&', $QUERY_STRING);
$i = 0;
while ($i < count($a)) {
    $b = split('=', $a[$i]);
    echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])),
         ' is ', htmlspecialchars(urldecode($b[1])), "<br /> ";
    $i++;
}
?>
PHP 相关文章推荐
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
yii实现创建验证码实例解析
Jul 31 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 #PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 #PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 #PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 #PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 #PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 #PHP
PHP Global定义全局变量使用说明
Aug 15 #PHP
You might like
php实现mysql同步的实现方法
2009/10/21 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
python中的测试框架
2020/11/13 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
成人大专自我鉴定范文
2013/10/19 职场文书
小学数学教学反思
2014/02/02 职场文书
《画》教学反思
2014/04/14 职场文书
银行授权委托书样本
2014/10/13 职场文书
婚育证明格式
2015/06/17 职场文书
运动会通讯稿200字
2015/07/20 职场文书
销售人员管理制度
2015/08/06 职场文书