用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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php生成随机数的三种方法
Sep 10 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
PHP Include文件实例讲解
Feb 15 PHP
php和html的区别点详细总结
Sep 24 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 function用法如何递归及return和echo区别
2014/03/07 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php抽象类用法实例分析
2015/07/07 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
python儿童学游戏编程知识点总结
2019/06/03 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
婚礼主持词开场白
2014/03/13 职场文书
安全生产月活动总结
2014/05/04 职场文书
工程承诺书怎么写
2014/05/24 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
市场部岗位职责
2015/02/12 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers