解决办法: 采用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;

}

大家是否遇到过这种问题呢?

在网上看到的一篇文章关于js和php编码的的更多相关文章

  1. 一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends

    说实在话,以前我只需要知道"寄生组合继承"是最好的,有个祖传代码模版用就行.最近因为一些事情,几个星期以来一直心心念念想整理出来.本文以<JavaScript高级程序设计&g ...

  2. 一篇文章理解JS数据类型、深拷贝和浅拷贝

    前言 笔者最近整理了一些前端技术文章,如果有兴趣可以参考这里:muwoo blogs.接下来我们进入正片: js 数据类型 六种 基本数据类型: Boolean. 布尔值,true 和 false. ...

  3. 一篇文章彻底弄懂Base64编码原理

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. Base64的由来 目前Base64已经成为网 ...

  4. 一篇文章彻底弄懂Base64编码原理(转载)

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. Base64的由来 目前Base64已经成为网 ...

  5. 知识扩展——(转)一篇文章彻底弄懂Base64编码原理

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. 一.Base64的由来 目前Base64已经成 ...

  6. 一篇文章彻底搞懂base64编码原理

    开始 在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现. base64是什么东东呢? Base64 ...

  7. js将一篇文章中多个连续的<br>标签替换成两个连续的<br>标签

    写本文的目的是今天恰好有一个之前做SEO的同事问我怎样把一篇文章中多个连续的br标签替换成两个连续的br标签,这里就牵涉到SEO层面的问题了. 在做SEO优化的时候,其中有一个需要注意的地方就是尽量减 ...

  8. 修改上一篇文章的node.js代码,支持调用自定义页面

    上一篇文章所有请求只能调用index.html,现在做个改造,允许调用自定义页面 服务端 app.js var app = require('http').createServer(handler) ...

  9. 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?

     壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...

随机推荐

  1. Empire C:游戏篇(1)

    随机生成1-6的数字,我们来猜是几 猜小了就提示数字小了,请再猜 猜大了就提示数字大了,请再猜 猜对了就提示恭喜,并提示是否继续再玩 ///riddle ///Author:JA //2015-1-2 ...

  2. 安装Arch Linux

    参考自:https://wiki.archlinux.org/index.php/Main_Page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 用fdisk建立分区 ...

  3. UIBezierPath类 笔记

    使用UIBezierPath类可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状.     ...

  4. tableView主从表在storyboard连线是 Selcetion Segue和Accessory Action的区别

    当按住Ctorl这样连线时会出现,当选择Selection Segue下面的push时,点击cell的任何位置都会跳转到下一个tableView,当选择Accessory Action的下面的push ...

  5. Linux系统下Redis安装(一)

    最近项目要使用Redis,特将这段时间将Redis的学习经验与大家分享,算是对这段时间学习成果的总结和技术提炼,不足之处还望大家批评指正. 项目背景: 有些很少改动的数据和经常使用的数据(例如系统中下 ...

  6. tensorflow 学习(一)

    改系列只为记录我学习 udacity 中深度学习课程!! 1. 整个课程分为四个部分,如上图所示. 第一部分将研究逻辑分类器,随机优化以及实际数据训练. 第二部分我们将学习一个深度网络,和使用正则化技 ...

  7. Netty5.x中新增和值得注意的点

    最近事情多,OneCoder折腾了好几天,总算翻译完成了. 翻译自官方文档:http://netty.io/wiki/new-and-noteworthy-in-5.x.html   该文档会列出在N ...

  8. tomcat access log 参数

    %a - 客户端IP地址 %A - 本机IP地址 %b - 发送字节数,不含HTTP头 如果为空是  '-' %B - 同上 %h - 客户端机器名 (如果connector的enableLookup ...

  9. 【转】HTTP 头部解释,HTTP 头部详细分析,最全HTTP头部信息

    HTTP 头部解释 ========================================================================================== ...

  10. 记录重置css样式

    ;} ol,ul{;;} table {; } caption, th, td { font-weight: normal; text-align: left; } a img, iframe { b ...