用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 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
PHP实现变色验证码实例
Jan 06 PHP
php获取文件大小的方法
Feb 26 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
浅谈PHP封装CURL
Mar 06 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
php自定义时间转换函数示例
2016/12/07 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP chop()函数讲解
2019/02/11 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Django如何自定义分页
2018/09/25 Python
python pandas生成时间列表
2019/06/29 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
python openssl模块安装及用法
2020/12/06 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
经典c++面试题五
2014/12/17 面试题
汽车运用工程专业求职信
2014/06/18 职场文书
2015年电工工作总结
2015/04/10 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL