Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用数据库中的html标记打印文本-Javascript_Javascript_Html_Reactjs_Parsing_Decode - Fatal编程技术网

使用数据库中的html标记打印文本-Javascript

使用数据库中的html标记打印文本-Javascript,javascript,html,reactjs,parsing,decode,Javascript,Html,Reactjs,Parsing,Decode,我正在React应用程序中使用CKEditor将用户内容保存到Firebase数据库中。内容按我的需要保存(例如,使用html标记 “内容嘿嘿\n” )但是当我想要获取数据时,问题就出现了 作为fetch的一个结果,比如说,我用html标记获取文本,而不是将其“转换”为粗体或斜体 当我进入Chrome控制台并检查element时,我看到如下内容: <td>&lt;p&gt;I am&amp;nbsp;&lt;strong&gt;testing&

我正在React应用程序中使用CKEditor将用户内容保存到Firebase数据库中。内容按我的需要保存(例如,使用html标记
“内容嘿嘿

\n”
)但是当我想要获取数据时,问题就出现了

作为fetch的一个结果,比如说,我用html标记获取文本,而不是将其“转换”为粗体或斜体

当我进入Chrome控制台并检查element时,我看到如下内容:

<td>&lt;p&gt;I am&amp;nbsp;&lt;strong&gt;testing&amp;nbsp;&lt;/strong&gt;&lt;em&gt;text&lt;/em&gt;&lt;/p&gt;
var text = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';
var decoded = $('<textarea/>').html(text).text();
alert(decoded);
pI-am&;nbsp;strong测试与测试;nbsp/strongemtext/em/p

问题是我以前在Laravel或Symphony中使用过“原始”db输入,但我不知道如何在javascript中使用它。我试着在google和stack中寻找它,但说实话,我失败了,因为我甚至不知道到底是什么问题,因为“用javascript从db中获取原始数据”并没有像我想象的那样工作

提前谢谢你的建议

另外,我知道Jquery中有这样的东西:

<td>&lt;p&gt;I am&amp;nbsp;&lt;strong&gt;testing&amp;nbsp;&lt;/strong&gt;&lt;em&gt;text&lt;/em&gt;&lt;/p&gt;
var text = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';
var decoded = $('<textarea/>').html(text).text();
alert(decoded);
var text='pname/ppspan style=“font-size:xx-small;”ajde/span/ppemda/em/p';
var decoded=$('').html(text.text();
警报(解码);

但我不知道如何用纯javascript(或ES6)编写此代码。

您可以使用RegExp替换:

var text = '&lt;p&gt;I am&amp;nbsp;&lt;strong&gt;testing&amp;nbsp;&lt;/strong&gt;&lt;em&gt;text&lt;/em&gt;&lt;/p&gt;';

var decoded = text.replace(/"&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, "\""); 
var text='pI am&;nbsp;strong测试与测试;nbsp/strongemtext/em/p';
var decoded=text.replace(/“&;/g,”&”).replace(//g,“>”).replace(//g,“可能(没有代码示例,我真的不知道)发生的原因不是来自获取,而是来自呈现

默认情况下,react在呈现组件时转义html标记

要避免转义和设置组件的html,请使用危险的html(
).

好的,所以在我问这个问题之前,我花了整整一个晚上来解决这个问题,就在我问了这个问题之后,我设法解决了这个问题

  • 我从npm包安装了“he”库(npm安装he)
  • 我安装了“html反应解析器”(npm安装html反应解析器)
  • 第一个用于从数据库解码html,第二个用于将html写入jsx元素

    例如:

    let text = he.decode(props.tdData[item]);
    return (<td>{Parser(text)}</td>);
    
    let text=he.decode(props.tdData[item]);
    返回({Parser(text)});
    
    这两个库为我做这件事,它的工作就像我想要的


    感谢您的任何意见,案件已经结案:)

    我读到了《危险…》一书,很多人都声称这很危险。他们建议改用“html反应解析器”。为了解码存储在db中的html,我使用了“he”库,这也是非常好和简单的。我将在5-10分钟内发布我所做的事情。但是谢谢你的建议!不客气。当然,根据文档,它可能会暴露安全风险,这取决于您执行获取部分的方式以及数据库的填充方式。应避免IMHO xss在db中的内容以及js如何与db对话方面的风险。当然,您的最终解决方案更安全,但它仍然解码并解析回根据服务器端检查(在这个特定场景中)应该“已经准备好”用于dom的内容。我在CMS系统中使用ckeditor,我甚至不想这样“解码”。我的意思是我需要“替换”存在于CKEditor中的每个标记,对吗?还是我错了?是的,没错。事实上,这是一个较长的版本,但我尝试过的版本。你可以制作一个等价对的映射,并从一个函数中创建regexp,该函数将接受匹配对(仍然需要映射所有符号)是的,这可能会很痛苦:D谢天谢地,有一个“他”库为我做了这件事:)酷,很高兴你找到了解决方案:D干杯