用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作的文本留言本的例子(一)
Oct 09 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
Yii框架中memcache用法实例
Dec 03 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
php简单备份与还原MySql的方法
May 09 PHP
PHP yield关键字功能与用法分析
Jan 03 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
PHP中防止SQL注入实现代码
2011/02/19 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
vue 扩展现有组件的操作
2020/08/14 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
python如何创建TCP服务端和客户端
2018/08/26 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
详解python程序中的多任务
2020/09/16 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
计算机专业毕业生自荐书
2014/06/02 职场文书
经济类毕业生求职信
2014/06/26 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
晚会闭幕词
2015/01/28 职场文书
银行求职自荐信范文
2015/03/04 职场文书
党员转正介绍人意见
2015/06/03 职场文书
导游词之山东八大关
2019/12/18 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android