我今天遇到了一个奇怪的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
答案 0 :(得分:2)
你是对的!如果您将两个字符串复制出来并在浏览器控制台中尝试,则可以从DB中编码一个秘密字符。
答案 1 :(得分:1)
我测试了从DB复制的字符串,它包含一些特殊字符。因此,您可以对该字符串使用encodeURIComponent()
javascript方法,然后将该编码字符串保存在DB中,同时检索该字符串上的执行decodeURIComponent()
。