用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 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
php文件上传的简单实例
Oct 19 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP二维数组去重实例分析
Nov 18 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
php和html的区别点详细总结
Sep 24 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 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 pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
pyqt和pyside开发图形化界面
2014/01/22 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python实现桌面托盘气泡提示
2019/07/29 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
中层干部竞聘演讲稿
2014/05/15 职场文书
政风行风建设责任书
2014/07/23 职场文书
安全生产学习心得体会
2016/01/18 职场文书
MongoDB数据库之添删改查
2022/04/26 MongoDB
Java 多线程协作作业之信号同步
2022/05/11 Java/Android