用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 相关文章推荐
建立文件交换功能的脚本(三)
Oct 09 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
Laravel ORM 数据model操作教程
Oct 21 PHP
php接口隔离原则实例分析
Nov 11 PHP
php判断数组是否为空的实例方法
May 10 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
python实现发送邮件功能代码
2017/12/14 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
如何基于Python按行合并两个txt
2020/11/03 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
精彩的英文自荐信
2014/01/30 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
廉洁使者实施方案
2014/03/29 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
广告宣传策划方案
2014/05/21 职场文书
企业党员一句话承诺
2014/05/30 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
郭明义电影观后感
2015/06/08 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android