关于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下通过POST还是GET来传值
Jun 05 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
Oct 30 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
利用ajax+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 中的类
2006/10/09 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php防盗链的常用方法小结
2010/07/02 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
10个php函数实用却不常见
2015/10/13 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
vue实现轮播图帧率播放
2021/01/26 Vue.js
Python调用C++程序的方法详解
2017/01/24 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python3.7 的新特性详解
2019/07/25 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
Python range与enumerate函数区别解析
2020/02/28 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
电脑饰品店的创业计划书
2014/01/21 职场文书
先进基层党组织材料
2014/12/25 职场文书
搞笑婚前保证书
2015/02/28 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
Java 多线程协作作业之信号同步
2022/05/11 Java/Android