如何在javascript中转义一些html?
给定文本如何在javascript中转义一些html?,javascript,html-encode,Javascript,Html Encode,给定文本 <b>This is some text</b> 不完全是我想要的。有什么想法吗?这应该适合你: 函数escapeHTML(字符串) { var pre=document.createElement('pre'); var text=document.createTextNode(字符串); 前附体(文本); 返回pre.innerHTML; } 安全警告 该函数不转义单引号和双引号,如果在错误的上下文中使用,仍然可能导致XSS。例如: var userWe
<b>This is some text</b>
不完全是我想要的。有什么想法吗?这应该适合你:
函数escapeHTML(字符串)
{
var pre=document.createElement('pre');
var text=document.createTextNode(字符串);
前附体(文本);
返回pre.innerHTML;
}
安全警告
该函数不转义单引号和双引号,如果在错误的上下文中使用,仍然可能导致XSS。例如:
var userWebsite=''onmouseover=“警报(\'gotcha\')”;
var profileLink='';
var div=document.getElemenetById('target');
div.innerHtml=profileLink;
//
感谢您指出这个案例。从中提取的代码片段。这应该适用于您:
函数escapeHTML(字符串)
{
var pre=document.createElement('pre');
var text=document.createTextNode(字符串);
前附体(文本);
返回pre.innerHTML;
}
安全警告
该函数不转义单引号和双引号,如果在错误的上下文中使用,仍然可能导致XSS。例如:
var userWebsite=''onmouseover=“警报(\'gotcha\')”;
var profileLink='';
var div=document.getElemenetById('target');
div.innerHtml=profileLink;
//
感谢您指出这个案例。从中提取的代码片段。请尝试此操作
函数属性(str){
返回字符串(str).replace(//&/g,“&;”).replace(//g,”).replace(//“/g,”);
}
试试这个
函数属性(str){
返回字符串(str).replace(//&/g,“&;”).replace(//g,”).replace(//“/g,”);
}
这里有一个函数,用它们的html实体替换尖括号。您可能希望将其展开以包含其他字符
function htmlEntities( html ) {
html = html.replace( /[<>]/g, function( match ) {
if( match === '<' ) return '<';
else return '>';
});
return html;
}
console.log( htmlEntities( '<b>replaced</b>' ) ); // <b>replaced</b>
函数html属性(html){
html=html.replace(/[]/g,函数(匹配){
if(match=='这里有一个函数,用它们的html实体替换尖括号。您可能希望将它扩展为包含其他字符
function htmlEntities( html ) {
html = html.replace( /[<>]/g, function( match ) {
if( match === '<' ) return '<';
else return '>';
});
return html;
}
console.log( htmlEntities( '<b>replaced</b>' ) ); // <b>replaced</b>
函数html属性(html){
html=html.replace(/[]/g,函数(匹配){
如果(匹配==”传统转义
如果您使用的是XHTML,则需要使用CDATA
部分。您也可以在HTML中使用这些部分,但HTML没有那么严格
我将字符串常量拆分,以便此代码将在CDATA块内的XHTML上内联工作。如果您将JavaScript作为单独的文件进行源代码开发,则无需为此费心。请注意,如果您将XHTML与内联JavaScript一起使用,则需要将代码包含在CDATA块中,否则其中一些将无法工作。您将遇到奇怪的、微妙的错误
function htmlentities(text) {
var escaped = text.replace(/\]\]>/g, ']]' + '>]]><' + '![CDATA[');
return '<' + '![CDATA[' + escaped + ']]' + '>';
}
jQuery DOM包装器
jQuery为名为text
的createTextNode
提供了一个方便的包装器。它非常方便。使用jQuery的功能如下:
$('#an-element').text("<strong>This won't be bold. The tags will be " +
"visible.</strong>");
$(“#元素”).text(“这不会是粗体的。标记将是”+
“可见。”;
传统转义
如果您使用的是XHTML,则需要使用CDATA
部分。您也可以在HTML中使用这些部分,但HTML没有那么严格
我将字符串常量拆分,以便此代码将在CDATA块内的XHTML上内联工作。如果您将JavaScript作为单独的文件进行源代码开发,则无需为此费心。请注意,如果您将XHTML与内联JavaScript一起使用,则需要将代码包含在CDATA块中,否则其中一些将无法工作。您将遇到奇怪的、微妙的错误
function htmlentities(text) {
var escaped = text.replace(/\]\]>/g, ']]' + '>]]><' + '![CDATA[');
return '<' + '![CDATA[' + escaped + ']]' + '>';
}
jQuery DOM包装器
jQuery为名为text
的createTextNode
提供了一个方便的包装器。它非常方便。使用jQuery的功能如下:
$('#an-element').text("<strong>This won't be bold. The tags will be " +
"visible.</strong>");
$(“#元素”).text(“这不会是粗体的。标记将是”+
“可见。”;
我最终做了以下工作:
function escapeHTML(s) {
return s.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>');
}
函数escapeHTML(s){
返回s.replace(/&/g,“&;”)
.替换(/“/g,”))
.替换(//g',);
}
我最终做了以下工作:
function escapeHTML(s) {
return s.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>');
}
函数escapeHTML(s){
返回s.replace(/&/g,“&;”)
.替换(/“/g,”))
.替换(//g',);
}
对于HTML DOM文档可用的情况,我喜欢@limc的答案
我喜欢@Michele Bosi和@Paolo对Node.js等非HTML DOM文档环境的回答
@Michael Bosi的答案可以通过取消调用replace 4次的需要来优化,只需调用一次replace,并结合一个巧妙的replace函数:
函数转义{
让查找={
“&”:“&;”,
'"': """,
'': ""
};
返回s.replace(/[&“]/g,(c)=>lookup[c]);
}
log(escape(“这是一些文本”);
对于HTML DOM文档可用的情况,我喜欢@limc的答案
我喜欢@Michele Bosi和@Paolo对Node.js等非HTML DOM文档环境的回答
@Michael Bosi的答案可以通过取消调用replace 4次的需要来优化,只需调用一次replace,并结合一个巧妙的replace函数:
函数转义{
让查找={
“&”:“&;”,
'"': """,
'': ""
};
返回s.replace(/[&“]/g,(c)=>lookup[c]);
}
console.log(转义(“这是一些文本”);
您可以对字符串中的所有字符进行编码:
function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}
或者只针对主要角色来担心(&,inebreaks,“and”),比如:
函数编码(r){
返回r.replace(/[\x26\x0A\'”]/g,函数(r){return“”+r.charCodeAt(0)+“;”})
}
test.value=encode('encodehtml实体!\n\n“安全”转义&在标记中有用!');
testing.innerHTML=test.value;
/*************
*\x26是与符号(必须是第一个),
*\x0A是新行,
*************/
www.WHAK.com
您可以对字符串中的所有字符进行编码:
function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}
或者只针对主要角色来担心(&,inebreaks,“and”),比如: