IE8下url包含中文使页面出现问题解决

原创 2018年04月16日 11:48:58

        每次开发遇到IE8浏览器,总会遇到这样或那样的问题(内心os:为什么还有人用都快放进博物馆的浏览器啊啊啊!!!真实情况:有问题,好的,马上,立刻解决)。

      从这个问题中主要讲一下web存储sessionStorage和localStorage的用法,先来介绍一下问题的背景,IE8浏览器下,页面上通过关键词搜索来一些值,搜索词是加在url上的,给出url地址:http://www.buildhr.com/cwkeywords/index.php?jobname=%E5%B7%A5%E7%A8%8B%E5%B8%88,jobname是搜索词,从入口进来时转义过,但是如果手动修改是,比如这样http://www.buildhr.com/cwkeywords/index.php?jobname=工程师,访问的时候会引起弹出的注册窗口出现一段代码,看下图

                                            

        因为这个注册弹窗很多地方都在用,所以不能改,那就只能从这个项目的代码入手改了,我们发现如果url是http://www.buildhr.com/cwkeywords/index.php?jobname=%E5%B7%A5%E7%A8%8B%E5%B8%88这种格式,就不会出现这段代码,但是你阻止不了用户就要去输入中文,我想到的就是用户输入中文然后访问时,我把中文用urldecode解析一下,然后放到jobname后面,再来访问,但是这样会出现一个问题,就是页面会死循环。这时localStorage就用上了。贴上代码:

<script>
    function getIEVersion() {
        var userAgent = navigator.userAgent;
        var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1;
        if (isIE) {
            /MSIE (\d+\.\d+);/ig.test(userAgent);
            var version = parseInt(RegExp["$1"]);
            if (version >= 7 && version <= 10) {
                return version;
            } else {
                return 6;//IE版本<=7
            }
        } else if (userAgent.indexOf("Edge") > -1) {
            return 12;
        } else if (userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1) {
            return 11;
        } else {
            return -1;
        }
    }

    getIEVersion();
    
    var jobname = "<?php echo $_GET['jobname']; ?>";
    var script_uri = "<?php echo $script_uri; ?>";
    var jobnames = "<?php echo $jobnames; ?>";
    var aaa = localStorage.getItem('a')
    if (aaa !== null) {
        localStorage.removeItem('a')
    }
    var bbb=!aaa
    if (getIEVersion() == 8 && bbb) {
        if (jobname.length != '') {
             window.location.href = script_uri+'?jobname='+jobnames;
             localStorage.setItem('a', true)
        }
    }

</script>

        主要就是判断是不是IE8,然后进行了一次存值和删值得操作,达到条件,跳转一次然后中断。

        这个来讲一下web存储sessionStorage和localStorage的用法,sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

        什么是localStorage、sessionStorage?

        在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

        用法:

        localStorage.getItem(key):获取指定key本地存储的值
        localStorage.setItem(key,value):将value存储到key字段

        localStorage.removeItem(key):删除指定key本地存储的值

        localStorage的优势与局限:

        localStorage的优势
        1、localStorage拓展了cookie的4K限制
        2、localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库,相比于 cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的
        localStorage的局限
        1、浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性
        2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
        3、localStorage在浏览器的隐私模式下面是不可读取的
        4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
        5、localStorage不能被爬虫抓取到localStorage与sessionStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的键值对会被清空

解决url中包含中文导致的乱码

今天的项目中碰到了一个乱码问题,从JS里传URL到服务器,URL中有中文参数,服务器里读出的中文参数来的全是“?”,查了网上JS编码相关资料得以解决。 解决方法如下:  1、在JS里对...
  • wodeyuer125
  • wodeyuer125
  • 2015年11月17日 18:24
  • 374

IE8get方法携带乱码(url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介)

转自:url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介 引子 浏览器URl地址,上网一定会用到,但是浏览器地址...
  • klx502
  • klx502
  • 2016年06月17日 19:35
  • 1886

Eclipse+Tomcat URL传中文字符报错400

今天在jsp中用href传值(中文字符),在Eclipse内置浏览器出错,但在火狐可以正常运行,搞了一天终于解决了,记录一下。先看下代码:&lt;a href = "Practice...
  • qq_31293215
  • qq_31293215
  • 2018年03月20日 19:29
  • 76

IE7、IE8下使用escape、encodeURI传递中文参数乱码的问题及解决方案

js跳转到指定页面,一旦escape()中文数据,浏览器就会终止和没有反应。上网搜了半天始终不得解。一种说法是,escape中文之后,url中出现了%u,IE7和IE8拒绝执行。目前看来差不多是这样的...
  • lucky8star
  • lucky8star
  • 2010年05月10日 16:08
  • 11167

在IE8下使用JSON.stringify()出现中文乱码的问题

原文链接:  http://hngmduyi.iteye.com/blog/1815221
  • zzstack
  • zzstack
  • 2014年07月14日 15:30
  • 1619

关于utf-8编码的ajax中url传中文及特殊符号乱码的实际可用处理办法

这两天,在做一个小东西,需要ajax来传送带()之类及中文乘法等特殊符号的处理,走了许多弯路,今天终于搞定了 由于直接涉及utf-8编码,所以涉及的转码还算好 php+js环境 在ajax中ur...
  • lwprain
  • lwprain
  • 2013年11月05日 10:47
  • 3358

善用encodeURI解决AJAX在IE10以下浏览器中的莫名BUG

今天做一个项目的时候,发现在IE10以下浏览器中,HTML文件本地浏览的时候,调用ajax失败。 反复查验后发现,原来是ajax部分调用了含中文字符的URL。最后做了很多测试,发现,只要项目不是以G...
  • binjly
  • binjly
  • 2013年08月05日 11:52
  • 1495

tomcat中配置支持中文的url

在使用tomcat服务器时,如果需要在url中支持中文的参数,需要对tomcat进行配置。配置方法如下: 1、打开配置文件 打开tomcat安装目录中conf目录下的server.xml配置文件; ...
  • yxtouch
  • yxtouch
  • 2017年04月28日 16:23
  • 2712

url 中文乱码问题

今天碰到了著名的URL参数中的中文乱码的问题。  其实就是个浏览器兼容的问题 ie :ie中需要对中文用encodeURI()编码 firefox/chrome:中不用,但在firefox/c...
  • dingxingmei
  • dingxingmei
  • 2012年12月26日 18:03
  • 4383

URL路径中含有中文

如果传递参数中含有中文,这是我们经常遇到的问题,只需要在接收端对接收变量进行转码就可以了 以下是我们经常用到的 String cmdType = request.getParameter("Cmd...
  • kingo0
  • kingo0
  • 2014年03月25日 15:14
  • 3010
收藏助手
不良信息举报
您举报文章:IE8下url包含中文使页面出现问题解决
举报原因:
原因补充:

(最多只允许输入30个字)