javascript' String.length返回错误的字符数

时间:2017-02-09 16:40:36

标签: javascript node.js string utf-8

我今天遇到了一个奇怪的javascript行为,这可能是由于某些字符编码问题。 length函数返回两个不同的字符数,显示完全相同的字符串。 在一个实例中,字符串是从数据库值复制粘贴的,在第二个实例中,我用键盘手动编写了字符。 我确定这与UTF有关,但我不知道如何得到"正确"字符数。 有没有办法知道错误的字符串在哪个编码和"修复"不知怎的? 有没有办法强制我的应用程序中的每个字符串都是UTF-8? 某处有隐藏的角色吗?

感谢您的帮助

var utils = {

/**
 * cleans up our url before db insertion
 *
 * @param url
 * @returns {String} the cleaned url
 */
cleanUrl : function(url){
    url = url.trim().toLowerCase();
    if(url.includes('?'))return url;

    var lastChar = url.charAt(url.length-1);
    console.log('lastchar = ' + lastChar);
    if(lastChar == '/'){
        url=url.substring(0, url.length-1);
    }
    return url;
},

doTest : function(){
    var url = "https://bitcointalk.org/‎"; //this string was taken from DB
    console.log('url length ' + url.length);
    console.log('url length ' + url.trim().length);
    var cleaned = this.cleanUrl(url);
    console.log('cleaned length ' + cleaned.length);
    console.log('cleaned ' + cleaned);


    console.log('------------------------------');

    var url2 = "https://bitcointalk.org/";  //this string was manually written
    console.log('url2 length ' + url2.length);
    console.log('url2 length ' + url2.trim().length);

    var cleaned2 = this.cleanUrl(url2);
    console.log('cleaned2 length ' + cleaned2.length);
    console.log('cleaned2 ' + cleaned2);

}
 };

   utils.doTest()

这是输出:

url length 25
url length 25
lastchar = ‎
cleaned length 25
cleaned https://bitcointalk.org/‎
------------------------------
url2 length 24
url2 length 24
lastchar = /
cleaned2 length 23
cleaned2 https://bitcointalk.org

2 个答案:

答案 0 :(得分:2)

你是对的!如果您将两个字符串复制出来并在浏览器控制台中尝试,则可以从DB中编码一个秘密字符。

答案 1 :(得分:1)

我测试了从DB复制的字符串,它包含一些特殊字符。因此,您可以对该字符串使用encodeURIComponent() javascript方法,然后将该编码字符串保存在DB中,同时检索该字符串上的执行decodeURIComponent()