用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
Jun 29 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
php数字游戏 计算24算法
Jun 10 PHP
php之XML转数组函数的详解
Jun 07 PHP
8个必备的PHP功能实例代码
Oct 27 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
php对文件进行hash运算的方法
Apr 03 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 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检测图片木马多进制编程实践
2013/04/11 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
JS原型、原型链深入理解
2016/02/27 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
原生js轮播特效
2017/05/18 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
新东网科技Java笔试题
2012/07/13 面试题
会计专业大学生职业生涯规划书
2014/02/11 职场文书
应届大专生求职信
2014/06/26 职场文书
理财学专业自荐书
2014/06/28 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
清洁员岗位职责
2015/02/15 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Python实现列表拼接和去重的三种方式
2021/07/02 Python