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生成带有雪花背景的验证码
Sep 28 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
深入分析php之面向对象
May 15 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
PHP性能优化大全(php.ini)
May 20 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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设计模式 Decorator(装饰模式)
2011/06/26 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
php使用curl访问https示例分享
2014/01/17 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
浅谈js中的bind
2019/03/18 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
python使用htmllib分析网页内容的方法
2015/05/08 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python+opencv实现阈值分割
2018/12/26 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
django中media媒体路径设置的步骤
2019/11/15 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
动物科学专业毕业生的自我评价
2013/11/29 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
2014年幼师工作总结
2014/11/22 职场文书