关于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程序61条面向对象分析设计的经验小结
Nov 12 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
php获取字段名示例分享
Mar 03 PHP
php使用codebase生成随机数
Mar 25 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
php使用crypt()函数进行加密
Jun 08 PHP
laravel orm 关联条件查询代码
Oct 21 PHP
PHP常用字符串函数用法实例总结
Jun 04 PHP
php微信小程序解包过程实例详解
Mar 31 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
培养自己的php编码规范
2015/09/28 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
python 自动批量打开网页的示例
2019/02/21 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
小学教师岗位职责
2013/11/25 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
授权委托书范本
2014/04/03 职场文书
入职担保书范文
2014/05/21 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
python入门之算法学习
2021/04/22 Python
Python读写yaml文件
2022/03/20 Python