关于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 相关文章推荐
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
PHP学习之正则表达式
Apr 17 PHP
PHP中读取照片exif信息的方法
Aug 20 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
两个php日期控制类实例
Dec 09 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 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用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
javascript时间函数大全
2014/06/30 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python合并字符串的3种方法
2015/05/21 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
师说教学反思
2014/02/07 职场文书
小学生寒假家长评语
2014/04/16 职场文书
综治宣传月活动总结
2014/04/28 职场文书
责任担保书范文
2014/05/21 职场文书
车间安全生产标语
2014/06/06 职场文书
幼儿园课题方案
2014/06/09 职场文书
工会趣味活动方案
2014/08/18 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
房产公证书样本
2015/01/23 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
优秀党员个人总结
2015/02/14 职场文书
毕业设计工作总结
2015/08/14 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python