关于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 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
Yii框架函数简单用法分析
Sep 09 PHP
TP5框架安全机制实例分析
Apr 05 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
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
PHP文件操作详解
2016/12/30 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
学生干部的自我评价分享
2014/01/18 职场文书
推广普通话演讲稿
2014/05/23 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
三方协议书
2015/01/27 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
目标责任书格式范文
2015/05/11 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js