diff --git a/server/core/BookConverter/ConvertBase.js b/server/core/BookConverter/ConvertBase.js index ef06884e..9ef99b57 100644 --- a/server/core/BookConverter/ConvertBase.js +++ b/server/core/BookConverter/ConvertBase.js @@ -1,6 +1,7 @@ const fs = require('fs-extra'); const iconv = require('iconv-lite'); const chardet = require('chardet'); +const he = require('he'); const textUtils = require('./textUtils'); const utils = require('../utils'); @@ -80,6 +81,10 @@ class ConvertBase { return text.replace(/ |[\t\n\r]/g, ' '); } + escapeEntities(text) { + return he.escape(text); + } + formatFb2(fb2) { let out = ''; out += ''; diff --git a/server/core/BookConverter/ConvertHtml.js b/server/core/BookConverter/ConvertHtml.js index 770b2bd7..26c097fc 100644 --- a/server/core/BookConverter/ConvertHtml.js +++ b/server/core/BookConverter/ConvertHtml.js @@ -79,6 +79,8 @@ class ConvertHtml extends ConvertBase { const newPara = new Set(['tr', '/table', 'hr', 'br', 'br/', 'li', 'dt', 'dd', 'p', 'title', '/title', 'h1', 'h2', 'h3', '/h1', '/h2', '/h3']); const onTextNode = (text, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars + text = this.escapeEntities(text); + if (!cutCounter && !(cutTitle && inTitle)) { let tOpen = (bold ? '' : ''); tOpen += (italic ? '' : ''); diff --git a/server/core/BookConverter/ConvertSamlib.js b/server/core/BookConverter/ConvertSamlib.js index 30eda273..31fe9067 100644 --- a/server/core/BookConverter/ConvertSamlib.js +++ b/server/core/BookConverter/ConvertSamlib.js @@ -218,6 +218,8 @@ class ConvertSamlib extends ConvertBase { if (!text) return; + text = this.escapeEntities(text); + switch (path) { case '/html/body/center/h2': titleInfo['book-title'] = text;