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 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
php中apc缓存使用示例
Dec 25 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
PHP stream_context_create()函数的使用示例
May 12 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
Dec 10 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_odbc和php写的serach数据库程序
2006/10/09 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
php实现微信扫码支付
2017/03/26 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
Windows下为Python安装Matplotlib模块
2015/11/06 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
18岁生日感言
2014/01/12 职场文书
九年级语文教学反思
2014/02/04 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
环保建议书作文500字
2015/09/14 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Python函数式编程中itertools模块详解
2021/09/15 Python