用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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
php流量统计功能的实现代码
Sep 29 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
分享一个php 的异常处理程序
Jun 22 PHP
php生成随机颜色的方法
Nov 13 PHP
php操作xml入门之cdata区段
Jan 23 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
如何使用php等比例缩放图片
Oct 12 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 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 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP 文件上传限制问题
2019/09/01 PHP
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
Python读大数据txt
2016/03/28 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
社团文化节邀请函
2014/01/10 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
励志演讲稿800字
2014/08/21 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
领导欢迎词致辞
2015/01/23 职场文书
实用求职信模板范文
2019/05/13 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python