1

我正在编写验证脚本,但遇到了一个非常特殊的问题。

如果用户输入的字符串恰好是编码的 html 字符(如&&),它将作为字符输出(在本例中为 &)。我的问题是:是否可以编写一个函数来确定字符串是否是编码字符?所以如果用户输入上述两个选项之一,我想启动一个特定的功能,如果它是一个非编码字符,我想做别的事情。

有没有办法做到这一点?

4

3 回答 3

3

根据定义,如果您不知道某物是否是编码的 HTML 实体,您就不知道。您可以将来自某个来源的所有文本视为已编码或未编码。为什么?因为这一切都只是文字。“&” 只是文字。我的意思是写“&” 这里。我不希望任何人解释它,我希望它按字面意思显示为“&”。

你怎么知道用户的意思?如果您开始根据猜测替换用户输入的文本,那么在某些情况下您总是会搞砸。这是典型的情况,所有“:D”都被图形笑脸代替,当你真正想输入“:D”时,这很烦人。

如果您想始终准确地保留用户输入的内容,请始终通过 HTML 编码函数运行所有用户输入,该函数将所有特殊字符替换为实体。请参阅伟大的逃避现实(或:使用文本中的文本需要知道的内容)

于 2012-12-04T13:01:24.610 回答
1

您可以通过比较编码长度和解码长度来检查字符串是否包含编码字符:

var string = "Your encoded & decoded string here"

function decode(str){
    return decodeURIComponent(str).replace(/&lt;/g,'<').replace(/&gt;/g,'>');
}

if(string.length == decode(string).length){
    // The string does not contain any encoded html.
}else{
    // The string contains encoded html.
}

此外,这比建议的 jQuery 方法要快得多。

于 2012-12-04T12:57:07.783 回答
0

像这样的事情会做到这一点。

function containsEncoded (val){
    var rHTMLEncoded = /&[^\s]*/;

    return rHTMLEncoded.test(val) ;
}


// Usage 
var encoded = containsEncoded("&amp;");
于 2012-12-04T13:01:49.737 回答