修改htmlEntities流行的javascript函数以保留“<br/>”子串

时间:2014-09-26 17:20:20

标签: javascript string function replace substring

我的问题是基于SO question How to encode a string in JavaScript for displaying in HTML?

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

我需要相同但应该在字符串中保留每个"<br>"子字符串。寻找修改函数htmlEntities的最佳方法。

谢谢。

3 个答案:

答案 0 :(得分:0)

比我的解决方案更聪明吗?

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

//.replace('&lt;br&gt;', '<br>') was added to the end.

如果这个解决方案优雅且足够好,请投票,以便我知道。谢谢。

答案 1 :(得分:0)

尝试

function htmlEntities(str) {
        return String(str)
               .replace(/&/g, '&amp;')
               .replace(/<[^<br]/g, '&lt;') // negate `<br`
               .replace(/[^br+| \/>]>/g, '&gt;') // negate `br>` or `br />`
               .replace(/"/g, '&quot;');
    }

var unsafestring = "<br><oohlook&atme><br><br />string";
function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/<[^<br]/g, '&lt;').replace(/[^br+| \/>]>/g, '&gt;').replace(/"/g, '&quot;');
}
document.body.innerText = htmlEntities(unsafestring);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

答案 2 :(得分:0)

我很惊讶没有人回答这个问题。您可以自己使用浏览器为您进行转义。没有正则表达式比让浏览器做最好的事情更好或更安全,处理HTML。

function escapeHTML(str){
    return new Option(str).innerHTML;
}

或使用Option()构造函数的简短替代

function beginfunction() {
  var CarType = document.forms["Cars"]["CarType"].value;
  var CarNumber = document.forms["Cars"]["CarNumber"].value;
  var CarPrice;
  var message = "";

  if ( !( CarType == 'A' || CarType == 'B' || CarType == 'C' ) ) {
    message = "Invalid Car Type";
  }else{
    if (CarType == 'A') {
      CarPrice = 30;
    } else if (CarType == 'B') {
      CarPrice = 20;
    }  else if (CarType == 'C'){
      CarPrice = 10;
    }
    message = CarPrice;
  }

  if (isNaN(CarNumber)) {
    message = "Invalid Quantity Entered";
  }

  if (CarNumber >0 && CarNumber <10)
  {

  }
  else{
    message = "Invalid";
  }

  document.getElementById('message').innerHTML = message;
  return false;
}