我有以下代码:
var name = "Joe O'Neal";
var row= [];
row.push(
"<td><input type='hidden' name='milestones[" + id + "].Name'
value='" + name + "' class='currentRowName' />
<span class='currentRowNameText'>" + name + "</span></td>")
但问题是我遇到名称变量中有撇号的情况,因此会导致问题:
value='" + name + "'
写这个的正确方法是什么,以避免与撇号发生冲突?在C#中,我会做类似
的事情 value=\"" + name + "\"
但这似乎不适用于javascript
答案 0 :(得分:6)
您要做的是清理您的输入。为此,您可以定义一个帮助器方法,用Unicode等效或HTML实体替换任何不安全的字符。这种事物不仅用于转义引号,还可以帮助防止XSS Attacks之类的内容。
以下内容改编自Tom Gruner's answer上另一个问题的Escaping HTML strings with jQuery。
var entityMap = {
"&": "&",
"<": "<",
">": ">",
'"': '"',
"'": ''',
"/": '/'
};
function escapeHtml(string) {
return String(string).replace(/[&<>"'\/]/g, function (s) {
return entityMap[s];
});
}
然后使用它,您将执行以下操作:
var name = "Joe O'Neal";
var safe_name = escapeHtml(name);
var row= [];
row.push(
"<td><input type='hidden' name='milestones[" + id + "].Name'
value='" + safe_name + "' class='currentRowName' />
<span class='currentRowNameText'>" + safe_name + "</span></td>");
如果您发现自己经常这样做,那么可能是时候开始使用可以自动执行此操作的模板库了。我推荐并发现有用的一个模板库是Google Closure Templates。它是一个企业级模板库,默认情况下会清理HTML。
有关Closure模板如何帮助保护您的更多信息,您可以查看他们在security上的页面。
答案 1 :(得分:4)
你可以引用字符:
var apostophe = '\''
或使用HTML实体(如果要在HTML文档中使用):
var apostrophe = ''';
var apostrophe = ''';
或使用unicode:
var apostrophe = '\u0027';
所以你可以这样做:
var name = 'O\u0027Neal';
el.innerHTML = '<input value="' + name + '">';
使用 replace 和正则表达式将字符映射到上述之一(实体或Unicode值)非常简单。