用js进行url编码后用php反解以及用php实现js的escape功能函数总结


Posted in PHP onFebruary 08, 2010

smarty可以直接对url进行编码, 比如<!--{$var|urlencode}-->
但在smarttemplate里面就好像没有,由于链接是由js提交的,而不是表单提交,所以不能自动编码。
解决办法: 采用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开发资源网
另外我找到个用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 相关文章推荐
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
使用php测试硬盘写入速度示例
Jan 27 PHP
php格式化电话号码的方法
Apr 24 PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
php 中的closure用法详解
Jun 12 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
Zend framework处理一个http请求的流程分析
Feb 08 #PHP
PHP函数常用用法小结
Feb 08 #PHP
在PHP中养成7个面向对象的好习惯
Jan 28 #PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 #PHP
php读取xml实例代码
Jan 28 #PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 #PHP
认识并使用PHP超级全局变量
Jan 26 #PHP
You might like
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
详解php反序列化
2020/06/10 PHP
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
python 系统调用的实例详解
2017/07/11 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
自我鉴定标准格式
2014/03/19 职场文书
房地产开发项目建议书
2014/05/16 职场文书
农村门前三包责任书
2014/07/25 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
总账会计岗位职责
2015/04/02 职场文书
推销搭讪开场白
2015/05/28 职场文书
《静夜思》教学反思
2016/02/17 职场文书
MySQL开启事务的方式
2021/06/26 MySQL
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
Python获取字典中某个key的value
2022/04/13 Python