关于js和php对url编码的处理方法


Posted in PHP onMarch 04, 2014

解决办法: 采用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实现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 GBK→UTF-8编码转换
May 24 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
php面向对象中的魔术方法中文说明
Mar 04 #PHP
thinkphp实现多语言功能(语言包)
Mar 04 #PHP
thinkphp实现图片上传功能分享
Mar 04 #PHP
php判断是否为json格式的方法
Mar 04 #PHP
php不写闭合标签的好处
Mar 04 #PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 #PHP
PHP中is_file不能替代file_exists的理由
Mar 04 #PHP
You might like
Apache服务器无法使用的解决方法
2013/05/08 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
js停止输出代码
2008/07/20 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python实现图片压缩代码实例
2019/08/12 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
django rest framework 自定义返回方式
2020/07/12 Python
python re.match()用法相关示例
2021/01/27 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
优秀小学生家长评语
2014/01/30 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
毕业生政审意见范文
2015/06/04 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL