Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript。处理编码字符串中的奇数字符_Javascript_Encoding - Fatal编程技术网

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

javascript。处理编码字符串中的奇数字符,javascript,encoding,Javascript,Encoding,我得到了一个值,编码如下: %3Cp%3E%0AGlobal%20Business%20Intensive%20Course%20%u2013% 我注意到其中一个字符的结尾似乎以不同的方式编码,即%u2013。它似乎是某种形式的unicode字符,但它导致我得到URI格式错误。有没有办法用标准编码字符替换这些字符?在本例中,似乎%u2013应该是连字符。这肯定是格式错误的。你从哪里得到的 这里有一种方法可以修复所有发生的这种畸形 var str = '%3Cp%3E%0AGlobal%20Bu

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

%3Cp%3E%0AGlobal%20Business%20Intensive%20Course%20%u2013%
我注意到其中一个字符的结尾似乎以不同的方式编码,即%u2013。它似乎是某种形式的unicode字符,但它导致我得到URI格式错误。有没有办法用标准编码字符替换这些字符?在本例中,似乎%u2013应该是连字符。

这肯定是格式错误的。你从哪里得到的

这里有一种方法可以修复所有发生的这种畸形

var str = '%3Cp%3E%0AGlobal%20Business%20Intensive%20Course%20%u2013%';

str = str.replace( /u\d{4}/g, function( sequence )
{
  return encodeURIComponent( eval( '"\\' + sequence + '"' ) );
} );

为了更加完整和正确,正则表达式还应该接受从
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));

实际上,这是一个破折号:下面的答案更灵活、更有用。这个答案有误报和意外替换的危险。