encodeURI /转义
使用JavaScript函数encodeURI / escape和encodeURIComponent时似乎有一个错误。 例:
escape( 'The Frames' ) // The 0.000000rames
encodeURI( 'The Frames' ) // The 0.000000rames
encodeURIComponent( 'The Frames' ) // The 0.000000rames
评论显示输出。 在任何浏览器中按预期方式运行Spotify以外的代码(以+或%20替换空格)执行此代码。
其他人可以证实这是一个错误? 或者我在这里做错了什么...? 是否有地方报告Spotify应用程序的错误?
编辑:显然上面的例子工作,因为他们应该。 但是,将它们合并到alert()中会显示一个混乱的字符串,而实际上它是正确的。
从指导方针:
编码字符串
为确保应用程序不会以潜在的不安全方式使用字符串,Spotify API提供的所有字符串都会被编码,以防意外滥用不会造成注入漏洞。 如果应用程序不使用下面描述的两种方法对这些字符串进行解码,则字符串将作为垃圾显示给用户。 唯一的例外是URI,它从不编码,因此不需要解码。 API文档规定了每种方法必须解码哪些字符串。 JavaScript字符串中添加了两种方法: decodeForText()和decodeForHTML() 。 如果想要以安全的方式使用字符串,例如设置innerText或使用document.createTextNode()创建文本节点,则应使用decodeForText()。 它将返回一个原始的非转义字符串,因此请确保它永远不会插入任何将被解释为HTML的上下文中。 如果字符串意图进入innerHTML或任何将被解释为HTML的代码片段,则必须使用decodeForHTML()。 它将确保<和>编码为<和>等。例如:
getElementById('song-title').innerHTML = track.title.decodeForHTML(); getElementById('song-title').innerText = track.title.decodeForText(); getElementById('song-title').appendChild(document.createTextNode(track.title.decodeForText()));
不使用这些方法的应用程序将a)无法显示来自Spotify API的元数据或任何其他数据,以及b)将在上传过程中被拒绝。 此外,请确保您从任何来自哪里(例如您的后端服务器)推送不安全的HTML字符串。
和源代码,如果你很好奇:
String.prototype.decodeForText = function() {
var result = "";
for (var i = 0; i < this.length; ++i) {
if (this.charAt(i) !== "&") {
result += this.charAt(i);
continue;
} else if (this.substring(i, i + 5) === "&") {
result += "&";
i += 4;
continue;
} else if (this.substring(i, i + 4) === "<") {
result += "<";
i += 3;
continue;
} else if (this.substring(i, i + 4) === ">") {
result += ">";
i += 3;
continue;
} else if (this.substring(i, i + 6) === """) {
result += """;
i += 5;
continue;
} else if (this.substring(i, i + 6) === "'") {
result += "'";
i += 5;
continue;
} else if (this.substring(i, i + 8) === "=") {
result += "=";
i += 7;
continue;
}
}
return result;
};
String.prototype.decodeForHTML = function() {
return this;
};
String.prototype.decodeForLink = function() {
return encodeURI(this.decodeForText());
}
String.prototype.encodeToHTML = function() {
var result = "";
for (var i = 0; i < this.length; ++i) {
if (this.charAt(i) === "&") {
result += "&";
} else if (this.charAt(i) === "<") {
result += "<";
} else if (this.charAt(i) === ">") {
result += ">";
} else if (this.charAt(i) === """) {
result += """;
} else if (this.charAt(i) === "'") {
result += "'";
} else if (this.charAt(i) === "=") {
result += "=";
} else {
result += this.charAt(i);
}
}
return result;
}
}(this));
链接地址: http://www.djcxy.com/p/26521.html
上一篇: encodeURI / escape
下一篇: Issue with javascript escape, encodeURI and encodeURIComponent