原生JavaScript支持HTML属性编码和JavaScript字符串编码?

时间:2015-08-13 18:39:02

标签: html encoding attributes

需要对属性值进行编码。 如果我像这样构建一个jQuery对象:

$('<div data-value="' + value + '">');

实际上,value必须按如下属性编码:

$('<div data-value="' + HtmlAttributeEncode(value) + '">');

我找不到这样的原生功能。有人建议只需用&quot;替换双引号,但Microsoft的HttpEncoder.HtmlAttributeEncode方法会对这四个字符& < " '进行编码。我似乎在quoteattr这样的实现:https://stackoverflow.com/a/9756789/88409,但这非常低效,调用replace会多次迭代字符串。同样,我需要一个用于编码javascript字符串的本机函数(例如$('<div onclick="var s =\'' + HtmlAttributeEncode(JavaScriptStringEncode(value)) + '\';alert(s);"></div>).appendTo(body);&lt;&lt;设计示例仅用于说明)

是否存在此功能的本机等效项?

注意:请不要提及escape(现已弃用,encodeURIencodeURIComponent)所有这些都与属性编码无关

2 个答案:

答案 0 :(得分:0)

没有

但是你不需要它们,因为你可以使用DOM方法(或者围绕它们的jQuery包装器)构建元素,因为你正在处理DOM而不是HTML,所以它绕过了转义的需要。

$('<div />', { "data-value" : value });

var div = document.createElement('div');
div.setAttribute('data-value', value);

如果您真的想要获取转义的HTML,可以使用DOM并从中生成HTML:

var html = $('<div />').append(
    $('<div />', { "data-value" : value })
).html();

答案 1 :(得分:0)

找到了一个npm软件包,可以完成您的工作!

https://www.npmjs.com/package/escape-html