【问题标题】:Determine if string is encoded HTML via jQuery?确定字符串是否通过 jQuery 编码为 HTML?
【发布时间】:2012-12-04 21:05:00
【问题描述】:

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

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

有没有办法做到这一点?

【问题讨论】:

  • 您是要仅针对这两个特定示例进行测试,还是针对 any html 字符实体进行测试?如果只是这两个简单的正则表达式应该做到这一点:if (/&|&/.test(strVar)) { ... }
  • @streetlight- 你可以 onkeypress() 并检查 ( & 或 &) 它会运行良好。!
  • 我正在尝试执行所有 html 字符条目,而不仅仅是这两个特定的。不过谢谢!

标签: javascript jquery string html-encode


【解决方案1】:

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

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

如果您想始终准确地保留用户输入的内容,请始终通过 HTML 编码函数运行所有用户输入,该函数将所有特殊字符替换为实体。见The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

【讨论】:

    【解决方案2】:

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

    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.
    }
    

    另外,这是significantly faster than the jQuery method that was suggested.

    【讨论】:

      【解决方案3】:

      这样的事情就可以了。

      function containsEncoded (val){
          var rHTMLEncoded = /&[^\s]*/;
      
          return rHTMLEncoded.test(val) ;
      }
      
      
      // Usage 
      var encoded = containsEncoded("&amp;");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 2018-01-06
        • 2010-10-27
        • 2014-11-20
        • 2013-06-07
        相关资源
        最近更新 更多