用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 相关文章推荐
NO3第三帝国留言簿制作过程
Oct 09 PHP
推荐个功能齐全的发送PHP邮件类
Jan 03 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
PHP 编程安全性小结
Jan 08 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
js函数的引用, 关于内存的开销
2012/09/17 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
浅谈js闭包理解
2019/03/28 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
python实现识别相似图片小结
2016/02/22 Python
Python实现KNN邻近算法
2021/01/28 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
Python的历史与优缺点整理
2020/05/26 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
学生学习总结的自我评价
2013/10/22 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
社会工作专业求职信
2014/07/15 职场文书
单位工作证明范文
2014/09/14 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
离职感谢信怎么写
2015/01/22 职场文书
铁人观后感
2015/06/16 职场文书
社区宣传标语口号
2015/12/26 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python