【问题标题】:Function for escaping quotes in javascript? [duplicate]在javascript中转义引号的功能? [复制]
【发布时间】:2014-11-13 10:27:10
【问题描述】:

JavaScript 中是否有与 PHP 中的 htmlentities($string, ENT_QUOTES) 相同的函数?找了好久都没找到,大家推荐正则表达式。

只是想确保在我尝试之前没有其他更简单的方法

【问题讨论】:

标签: javascript php quotes


【解决方案1】:

看到这个tutorial

它是 PHP htmlentities 函数的“端口”:

function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}

【讨论】:

    【解决方案2】:

    嗯,有 PHP.js 的实现:http://phpjs.org/functions/htmlentities/

    function htmlentities(string, quote_style, charset, double_encode) {
      //  discuss at: http://phpjs.org/functions/htmlentities/
      // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
      //  revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
      //  revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
      // improved by: nobbler
      // improved by: Jack
      // improved by: Rafał Kukawski (http://blog.kukawski.pl)
      // improved by: Dj (http://phpjs.org/functions/htmlentities:425#comment_134018)
      // bugfixed by: Onno Marsman
      // bugfixed by: Brett Zamir (http://brett-zamir.me)
      //    input by: Ratheous
      //  depends on: get_html_translation_table
      //   example 1: htmlentities('Kevin & van Zonneveld');
      //   returns 1: 'Kevin &amp; van Zonneveld'
      //   example 2: htmlentities("foo'bar","ENT_QUOTES");
      //   returns 2: 'foo&#039;bar'
    
      var hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style),
        symbol = '';
      string = string == null ? '' : string + '';
    
      if (!hash_map) {
        return false;
      }
    
      if (quote_style && quote_style === 'ENT_QUOTES') {
        hash_map["'"] = '&#039;';
      }
    
      if ( !! double_encode || double_encode == null) {
        for (symbol in hash_map) {
          if (hash_map.hasOwnProperty(symbol)) {
            string = string.split(symbol)
              .join(hash_map[symbol]);
          }
        }
      } else {
        string = string.replace(/([\s\S]*?)(&(?:#\d+|#x[\da-f]+|[a-zA-Z][\da-z]*);|$)/g, function(ignore, text, entity) {
          for (symbol in hash_map) {
            if (hash_map.hasOwnProperty(symbol)) {
              text = text.split(symbol)
                .join(hash_map[symbol]);
            }
          }
    
          return text + entity;
        });
      }
    
      return string;
    }
    

    【讨论】:

      【解决方案3】:

      JavaScript 没有任何方便的函数来生成转义的 HTML。

      在 JavaScript 中为 HTML 转义数据通常使用 DOM 方法完成,并且避免将 HTML 字符串完全混合在一起。

      element.setAttribute("data-foo", 'Example value with a " in it');
      

      在大多数需要将文本转换为 HTML 字符串的情况下(即,将其放入当前文档不是最终目标),解决方法是创建一个 div 元素,然后对其使用 DOM 方法,然后阅读div 的innerHTML 属性。

      【讨论】:

        【解决方案4】:

        你可能正在寻找这个

        var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
           return '&#'+i.charCodeAt(0)+';';
        });
        

        注意,那个

        此代码会将给定范围内的所有字符(unicode 00A0 - 9999,以及与号、大于和小于)替换为其 html 实体等效项,即 nnn;其中 nnn 是我们从 charCodeAt 获得的 unicode 值。 ref

        【讨论】:

          猜你喜欢
          • 2013-04-14
          • 2012-12-27
          • 2011-01-01
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          相关资源
          最近更新 更多