用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 相关文章推荐
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP 裁剪图片
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
层叠菜单的动态生成
2006/10/09 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
财务分析个人的自荐书范文
2013/11/24 职场文书
优秀部门获奖感言
2014/02/14 职场文书
安全责任书范文
2014/03/12 职场文书
个人工作主要事迹
2014/05/08 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
vue实现滑动解锁功能
2022/03/03 Vue.js