代码之家  ›  专栏  ›  技术社区  ›  GSto

JavaScript。处理编码字符串中的奇数字符

  •  2
  • GSto  · 技术社区  · 14 年前

    我得到了一个值,编码方式如下:

    %3Cp%3E%0AGlobal%20Business%20Intensive%20Course%20%u2013%
    

    我注意到其中一个字符在结尾处似乎是以不同的方式编码的,即%u2013。它似乎是某种形式的Unicode字符,但它使我得到了URI格式错误。有没有办法用标准编码字符替换这些字符?在这个例子中,似乎%u2013应该是连字符。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Peter Bailey    14 年前

    当然是畸形。你从哪儿弄来的?

    这里有一种方法可以修复所有出现的这种类型的畸形。

    var str = '%3Cp%3E%0AGlobal%20Business%20Intensive%20Course%20%u2013%';
    
    str = str.replace( /u\d{4}/g, function( sequence )
    {
      return encodeURIComponent( eval( '"\\' + sequence + '"' ) );
    } );
    
        2
  •  2
  •   webDevAndEverythingElse    8 年前

    为了更加完整和正确,正则表达式还应该接受来自 A F ,因为 %u2013 指四位十六进制数。你应该在正则表达式中包含百分号,否则你最终会解释 Blu2000 作为一个Unicode转义序列,它不是。

    function fixUnicodeUrl(url) {
        var result = url.replace(/%u[0-9a-f]{4}/gi, function (match) {
            var codepoint = parseInt(match.substring(2), 16);
            var str = String.fromCharCode(codepoint);
            return encodeURIComponent(str);
        });
        return result;
    }
    
    var yourUrl = '%3Cp%3E%0AGlobal%20Business%20Intensive%20Course%20%u2013%';
    alert(fixUnicodeUrl(yourUrl));