From 68a516991878e8ec896623b03d675ee57684b744 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 17 Jan 2017 16:53:22 -0500 Subject: [PATCH] Decode HTML entities by default on node/server Set parser options `decodeEntities` to true for `html-dom-parser`, which gets passed to `htmlparser2`. Write test to confirm that entities passed to React element's children are decoded (but they will still be encoded when rendered by ReactDOMServer). --- index.js | 5 ++++- test/html-to-react.js | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index cb3697b1..25f90d02 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,9 @@ var domToReact = require('./lib/dom-to-react'); var htmlToDOM = require('html-dom-parser'); +// decode HTML entities by default for `htmlparser2` +var domParserOptions = { decodeEntities: true }; + /** * Convert HTML string to React elements. * @@ -18,7 +21,7 @@ function HTMLReactParser(html, options) { if (typeof html !== 'string') { throw new TypeError('First argument must be a string'); } - return domToReact(htmlToDOM(html), options); + return domToReact(htmlToDOM(html, domParserOptions), options); } /** diff --git a/test/html-to-react.js b/test/html-to-react.js index 156866d9..388a6ff1 100644 --- a/test/html-to-react.js +++ b/test/html-to-react.js @@ -78,6 +78,13 @@ describe('html-to-react', function() { assert.equal(render(reactElement), svg); }); + it('decodes HTML entities', function() { + var encodedEntities = 'asdf & ÿ ü ''; + var decodedEntities = 'asdf & ÿ ü \''; + var reactElement = Parser('' + encodedEntities + ''); + assert.equal(reactElement.props.children, decodedEntities); + }); + }); /**