日期:2014-05-16  浏览次数:20365 次

字符串反转义的问题,困扰了我一天了!
本帖最后由 webstandards 于 2014-01-10 00:27:44 编辑
从数据库里读出来的字符串是已经被转义过了的,要在浏览器显示时再把它反转义。

没进行反转义是下面这个效果。
<div class="itemContent" id="itemContenter">
&lt;p&gt;
8864的萨芬的萨芬55
&lt;/p&gt;
</div>

我用了上面的反转义函数过了一遍,失败。
<script type="text/javascript">
var itemContent="&lt;p&gt;8864的萨芬的萨芬55&lt;/p&gt;
&lt;p&gt;8864的萨芬的萨芬55&lt;/p&gt;"
itemContent=itemContent.replace(/&gt;/g,">").replace(/&lt;/g,"<");
itemContenter.innerHTML=itemContent;
</script>

后来发现只要被反转义的字符串里有换行,就没法反转义。如果被反转义的字符串去掉换行,即变成
&lt;p&gt;8864的萨芬的萨芬55&lt;/p&gt;
就可以成功反转义。

但是从数据库里读出来的字符串都是带有换行的,用什么方法可以实现反转义啊?

------解决方案--------------------
什么编程语言?

php 用htmlspecialchars_decode($str);


JS代码参考:http://phpjs.org/functions/htmlspecialchars_decode/

function htmlspecialchars_decode (string, quote_style) {
  var optTemp = 0,
    i = 0,
    noquotes = false;
  if (typeof quote_style === 'undefined') {
    quote_style = 2;
  }
  string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
  var OPTS = {
    'ENT_NOQUOTES': 0,
    'ENT_HTML_QUOTE_SINGLE': 1,
    'ENT_HTML_QUOTE_DOUBLE': 2,
    'ENT_COMPAT': 2,
    'ENT_QUOTES': 3,
    'ENT_IGNORE': 4
  };
  if (quote_style === 0) {
    noquotes = true;
  }
  if (typeof quote_style !== 'number') {
    quote_style = [].concat(quote_style);
    for (i = 0; i < quote_style.length; i++) {
      if (OPTS[quote_style[i]] === 0) {
        noquotes = true;
      } else if (OPTS[quote_style[i]]) {
        optTemp = optTemp 
------解决方案--------------------
 OPTS[quote_style[i]];
      }
    }
    quote_style = optTemp;
  }
  if (quote_style & OP