关于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 iconv函数的使用详解
Jun 09 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
yii框架搜索分页modle写法
Dec 19 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 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
咖啡语言
2021/03/03 咖啡文化
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
深入理解js中this的用法
2016/05/28 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
Python多线程扫描端口代码示例
2018/02/09 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
遗传算法python版
2018/03/19 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python中_del_还原数据的方法
2020/12/09 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
Pytorch可视化的几种实现方法
2021/06/10 Python