用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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
smarty的保留变量问题
Oct 23 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
php微信公众号开发之秒杀
Oct 20 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
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
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
php发送邮件的问题详解
2015/06/22 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
js 提交和设置表单的值
2008/12/19 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
Python 多线程Threading初学教程
2017/08/22 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
工程造价管理专业大专生求职信
2013/10/06 职场文书
关于期中考试的反思
2014/02/02 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年人事部工作总结
2014/12/03 职场文书
开天辟地观后感
2015/06/09 职场文书
单位工资证明范本
2015/06/12 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书