使用以下简单的javascript代码分析location.hash:<script type="text/javascript">alert(location.hash);</script>我很难分离出包含&的GET变量(编码为%26)和用于分隔变量的&。
范例一:

  • code = php&age = 15d

  • 示例二:
  • code = php%20%26%20code&age = 15d

  • 如您所见,示例1没问题,但是让javascript知道示例2中的“code = php&code”超出了我的能力范围:
    (注意:我并没有真正使用这些变量名,只有在搜索词与搜索键不匹配的情况下,才能将它们更改为其他名称,所以我认为这不是有效的解决方案。)

    最佳答案

    片段标识符(“哈希”)中的%26和&之间没有区别。 “&”只是URI的查询(“search”)段中具有特殊含义的保留字符。将'&'转义为'%26'所获得的应用程序级可见性仅需将'a'转义为'%61'。

    由于没有用于在片段标识符中隐藏结构化数据的标准编码方案,因此您可以自己制作。例如,使用“+ XX”十六进制编码来编码组件中的字符:

    hxxp://www.example.com/page#code=php+20+2B+20php&age=15d
    
    function encodeHashComponent(x) {
        return encodeURIComponent(x).split('%').join('+');
    }
    function decodeHashComponent(x) {
        return decodeURIComponent(x.split('+').join('%'));
    }
    
    function getHashParameters() {
        var parts= location.hash.substring(1).split('&');
        var pars= {};
        for (var i= parts.length; i-->0;) {
            var kv= parts[i].split('=');
            var k= kv[0];
            var v= kv.slice(1).join('=');
            pars[decodeHashComponent(k)]= decodeHashComponent(v);
        }
        return pars;
    }
    

    关于javascript - 检测位置中&和%26之间的差异。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/619240/

    10-09 21:13