我正在研究验证脚本,但我遇到了一个非常特殊的问题。
如果用户输入的字符串恰好是编码的html字符(如&
或&
),则会输出为字符(在本例中为&)。我的问题是:是否有可能编写一个函数来确定字符串是否是编码字符?因此,如果用户输入上述两个选项之一,我想启动一个特定的功能,如果它是一个非编码字符,我想做其他的事情。
有办法做到这一点吗?
答案 0 :(得分:3)
根据定义,如果您不知道某些东西是否是编码的HTML实体,则您不知道。您可以将来自特定来源的所有文本视为已编码或未编码。为什么?因为它只是文字。 “&放大器;放大器;”只是文字。我意味着写“& amp;”这里。我不希望任何人解释它,我希望它在字面上显示为“& amp;”。
您如何知道用户的意思?如果您开始根据猜测替换用户输入的文本,在某些情况下,您将始终将其搞砸。这是典型的情况,所有“:D”都被图形笑脸取代,当你真的想输入“:D”时这很烦人。
如果您想要始终保留用户输入的内容,请始终通过HTML编码功能运行所有用户输入,该功能会将所有特殊字符替换为实体。请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
答案 1 :(得分:1)
您可以通过比较编码长度和解码长度来检查字符串是否包含编码字符:
var string = "Your encoded & decoded string here"
function decode(str){
return decodeURIComponent(str).replace(/</g,'<').replace(/>/g,'>');
}
if(string.length == decode(string).length){
// The string does not contain any encoded html.
}else{
// The string contains encoded html.
}
此外,这是significantly faster than the jQuery method that was suggested.
答案 2 :(得分:0)
这样的事情就可以做到。
function containsEncoded (val){
var rHTMLEncoded = /&[^\s]*/;
return rHTMLEncoded.test(val) ;
}
// Usage
var encoded = containsEncoded("&");