这是最佳做法吗?
不会。实际上,您有HTML注入问题导致错误,在最坏的情况下,注入的字符串可能包含用户提交的内容,因此XSS安全漏洞。
将纯文本内容和属性值放入HTML字符串时, 必须对其进行
HTML编码。在PHP中,您必须调用
htmlspecialchars()进入HTML的字符串来执行此操作。在Javascript中,您没有内置的HTML转义功能,因此您必须自己编写。通过使用
s.replace(/&/g,'&').replace(/</g, '<').replace(/"/g, '"')进入HTML的字符串。
onclick =“ someFunc('{STRING} ');”
这是逃避混乱的全新境界。在事件处理程序属性内的Javascript字符串文字中,您必须对字符串进行JS编码(
-escaping'以及一些Unipre字符以确保完整性) ,
然后对结果进行HTML编码。否则,字符串可以突破其字符串字面定界符,并注入任意JS代码。在所有情况下都应避免使用内联事件处理程序属性,尤其是在模板中。
用HTML字符串创建页面内容很糟糕。您很可能会产生转义错误并损害应用程序的安全性。改用类似DOM的方法,您不必为此担心。您似乎正在使用jQuery,因此请尝试使用jQuery
1.4元素创建快捷方式:
$('<tr>').append( $('<td>').append( $('<a>', { href: o.link, text: o.word, onclick: function() { someFunc(o.string); } }) ));或者,将空白行实际上保留为HTML文档,然后将其隐藏(
display: none)或在启动时将其与文档分离(
removeChild或jQuery
detach)。然后,当需要新行时,克隆空白行并进行所需的更改:
var blankRow= $('#blankRow').detach(); ...var newRow= blankRow.clone();var link= newRow.find('td>a');link.attr('href': o.link);link.text(o.word);link.click(function() { someFunc(o.string);});如果必须从字符串模板创建内容,请确保默认情况下模板函数HTML会转义每个替换,并通过选择要解析的内容内的节点来附加事件
click(function() {... })。或者使用事件委托(例如jQuery live())来处理事件,而不必在添加时绑定到新节点。



