用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 相关文章推荐
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
php获取错误信息的方法
Jul 17 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
模仿OSO的论坛(三)
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
php文件操作实例代码
2012/05/10 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
vue删除html内容的标签样式实例
2018/09/13 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
python学习 流程控制语句详解
2016/06/01 Python
常见python正则用法的简单实例
2016/06/21 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
Python3实现购物车功能
2018/04/18 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
对Django外键关系的描述
2019/07/26 Python
Python实现某论坛自动签到功能
2019/08/20 Python
Python内置类型性能分析过程实例
2020/01/29 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
大学生自我鉴定
2013/12/08 职场文书
文化建设工作方案
2014/05/12 职场文书
小学语文教研活动总结
2014/07/01 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
拆迁委托协议书
2014/09/15 职场文书
关于运动会的广播稿
2014/09/22 职场文书
八月迷情观后感
2015/06/11 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android