关于js和php对url编码的处理方法


Posted in PHP onMarch 04, 2014

解决办法: 采用js对URL中的汉字进行escape编码。

<a href="" onclick="window.open('product_list.php?p_sort='+escape('PHP开发资源网'));">

这样点击链接后的效时:

引用:http://127.0.0.1/shop/product_list.php?p_sort=PHP%u5F00%u53D1%u8D44%u6E90%u7F51

生成了这样的效果, 很明显用PHP的urldecode()或者base64_decode()是无法反解的。

解决方法, 用PHP写一个反解函数:

function js_unescape($str){
        $ret = '';
        $len = strlen($str);
        for ($i = 0; $i < $len; $i++){
                if ($str[$i] == '%' && $str[$i+1] == 'u'){
                        $val = hexdec(substr($str, $i+2, 4));
                      if ($val < 0x7f) $ret .= chr($val);
                      else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                        else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
                        $i += 5;
                }
                else if ($str[$i] == '%'){
                        $ret .= urldecode(substr($str, $i, 3));
                        $i += 2;
                }
                else $ret .= $str[$i];
        }
       return $ret;
}

注意JS编码会自动转换成为UTF-8, 所以必须进行编码转换才能得到正确的结果,否则会中文乱码。

print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));

到此我们就成功地反解了js的escape编码了。

另外我找到个用PHP实现js的escape编码的函数:

function phpescape($str){
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++){
if(ord($str[$i])>=127){
$tmpString=bin2hex(iconv("gb2312","ucs-2",substr($str,$i,2)));
        //$tmpString=substr($tmpString,2,2).substr($tmpString,0,2);window下可能要打开此项
$retrunString.="%u".$tmpString;
$i++;
} else {
        $retrunString.="%".dechex(ord($str[$i]));
}}
return $retrunString;
}
PHP 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
PHP开发微信支付的代码分享
May 25 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
php面向对象中的魔术方法中文说明
Mar 04 #PHP
thinkphp实现多语言功能(语言包)
Mar 04 #PHP
thinkphp实现图片上传功能分享
Mar 04 #PHP
php判断是否为json格式的方法
Mar 04 #PHP
php不写闭合标签的好处
Mar 04 #PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 #PHP
PHP中is_file不能替代file_exists的理由
Mar 04 #PHP
You might like
php抓取页面的几种方法详解
2013/06/17 PHP
php自定义分页类完整实例
2015/12/25 PHP
JavaScript 程序编码规范
2010/11/23 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
js倒计时抢购实例
2015/12/20 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python 实现简易的记事本
2020/11/30 Python
信息系统专业个人求职信范文
2013/12/07 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
九年级英语教学反思
2014/01/31 职场文书
企业元宵节主持词
2014/03/25 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
安全宣传标语
2014/06/10 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
2015年市场部工作总结
2015/04/30 职场文书
我的长征观后感
2015/06/09 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript