用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中动态HTML的输出技术
Oct 09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
PHP文件下载实例代码浅析
Aug 17 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
关于ThinkPHP中的异常处理详解
May 11 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
phpQuery占用内存过多的处理方法
2013/11/13 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
python根据文件大小打log日志
2014/10/09 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Python 性能优化技巧总结
2016/11/01 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
利用python 读写csv文件
2020/09/10 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
环境科学专业大学生自荐信格式
2013/09/21 职场文书
安全演讲稿开场白
2014/08/25 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android