如何在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 '&lt;';
        else return '&gt;';
    });
    return html;
}

console.log( htmlEntities( '<b>replaced</b>' ) ); // &lt;b&gt;replaced&lt;/b&gt;
函数html属性(html){
html=html.replace(/[]/g,函数(匹配){

if(match=='这里有一个函数,用它们的html实体替换尖括号。您可能希望将它扩展为包含其他字符

function htmlEntities( html ) {
    html = html.replace( /[<>]/g, function( match ) {
        if( match === '<' ) return '&lt;';
        else return '&gt;';
    });
    return html;
}

console.log( htmlEntities( '<b>replaced</b>' ) ); // &lt;b&gt;replaced&lt;/b&gt;
函数html属性(html){
html=html.replace(/[]/g,函数(匹配){
如果(匹配==”传统转义
如果您使用的是XHTML,则需要使用
CDATA
部分。您也可以在HTML中使用这些部分,但HTML没有那么严格

我将字符串常量拆分,以便此代码将在CDATA块内的XHTML上内联工作。如果您将JavaScript作为单独的文件进行源代码开发,则无需为此费心。请注意,如果您将XHTML与内联JavaScript一起使用,则需要将代码包含在CDATA块中,否则其中一些将无法工作。您将遇到奇怪的、微妙的错误

function htmlentities(text) {
    var escaped = text.replace(/\]\]>/g, ']]' + '>]]&gt;<' + '![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, ']]' + '>]]&gt;<' + '![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, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}
函数escapeHTML(s){
返回s.replace(/&/g,“&;”)
.替换(/“/g,”))
.替换(//g',);
}
我最终做了以下工作:

function escapeHTML(s) { 
    return s.replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}
函数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”),比如: