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 array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
利用php获取服务器时间的实现代码
Jun 07 PHP
PHP利用header跳转失效的解决方法
Oct 24 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
php时间函数用法分析
May 28 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
Mar 18 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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
基于mysql的论坛(5)
2006/10/09 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
php 常用的系统函数
2017/02/07 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python入门必须知道的11个知识点
2018/03/21 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python访问hdfs的操作
2020/06/06 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
促销活动计划书
2014/05/02 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
python b站视频下载的五种版本
2021/05/27 Python
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python