用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调用数据库的存贮过程!
Oct 09 PHP
PHP 中文处理技巧
Apr 25 PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
PHP empty函数报错解决办法
Mar 06 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP中常用的魔术方法
Apr 28 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 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在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
请解释virtual关键字的含义
2015/06/17 面试题
八项规定整改方案
2014/10/01 职场文书
干部考察材料范文
2014/12/24 职场文书
公务员年终个人总结
2015/02/12 职场文书
大学生村官个人总结
2015/02/15 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
Elasticsearch 数据类型及管理
2022/04/19 Python
css3 文字断裂效果
2022/04/22 HTML / CSS