Reputation: 495
I am trying to display HTML content on React front side.
<p>Hello/<p>
Aadafsf
<h1>H1 in hello</h1>
I write this from CKEditor from Admin side
<p>Hello/<p>
Aadafsf
<h1>H1 in hello</h1>
<p>Hello/<p>
Aadafsf
<h1>H1 in hello</h1>
dompurify
import {Parser} from "html-to-react";
import DOMPurify from "dompurify";
{Parser().parse(DOMPurify.sanitize(HTMLCONTENT))}
I tried this but I'm not getting the expected output.
dangerouslySetInnerHTML
I have the below HTML content:
<h2>This is Heading</h2><p><p></p></p><p>This is para.</p><p> </p><p><strong>This is Bold</strong></p><p> </p><ol><li><strong>dwsfdf</strong></li><li><strong>fdsfdf</strong></li></ol><p> </p><p> </p><p> </p><figure class="media"><oembed url="https://youtu.be/rokGy0huYEA"></oembed></figure>
I used it like:
<div dangerouslySetInnerHTML={{__html: HTMLCONTENT}} />;
Upvotes: 4
Views: 7497
Reputation: 902
Actually, your mistake is not on the serialization, it is because there is a typo in your HTML.
The <p>
tag is "closed" by a /<p>
tag and not by a </p>
!
So you need to update your HTML:
- <p>Hello/<p>
+ <p>Hello</p>
Aadafsf
<h1>H1 in hello</h1>
Also, in order to display raw HTML in your component. React offer a function for that dangerouslySetInnerHTML
.
But, take real care as this can open your site to attacks known as cross-site scripting (XSS).
Upvotes: 2
Reputation: 26
You could allow some tags you want like this
let clean = DOMPurify.sanitize('<div>hello</div>',{ALLOWED_TAGS: ['b', 'q'], ALLOWED_ATTR: ['style']});
Upvotes: 0