escape XML chars in title

This commit is contained in:
Alex Adam 2017-10-26 18:06:31 +03:00
parent 36c9b68e10
commit d25e851edc
3 changed files with 19 additions and 14 deletions

View file

@ -154,7 +154,7 @@ function force($content, withError) {
contentString = contentString.replace(/ /gi, ' '); contentString = contentString.replace(/ /gi, ' ');
// getHref() replace does not work (& is overwritten) // getHref() replace does not work (& is overwritten)
contentString = escapeAmp(contentString); contentString = escapeXMLChars(contentString);
return contentString; return contentString;
} catch (e) { } catch (e) {

View file

@ -38,11 +38,11 @@ function _buildEbook(allPages) {
var ebookFileName = 'eBook.epub'; var ebookFileName = 'eBook.epub';
if (ebookTitle) { if (ebookTitle) {
// ~TODO a pre-processing function to apply escapeAmp to all page.titles // ~TODO a pre-processing function to apply escapeXMLChars to all page.titles
ebookName = escapeAmp(ebookTitle); ebookName = escapeXMLChars(ebookTitle);
ebookFileName = getEbookFileName(ebookTitle) + '.epub'; ebookFileName = getEbookFileName(ebookTitle) + '.epub';
} else { } else {
ebookName = escapeAmp(allPages[0].title); ebookName = escapeXMLChars(allPages[0].title);
ebookFileName = getEbookFileName(allPages[0].title) + '.epub'; ebookFileName = getEbookFileName(allPages[0].title) + '.epub';
} }
@ -73,7 +73,7 @@ function _buildEbook(allPages) {
'<h1 class="frontmatter">Table of Contents</h1>' + '<h1 class="frontmatter">Table of Contents</h1>' +
'<ol class="contents">' + '<ol class="contents">' +
allPages.reduce(function(prev, page) { allPages.reduce(function(prev, page) {
var tmpPageTitle = escapeAmp(page.title); var tmpPageTitle = escapeXMLChars(page.title);
return prev + '\n' + '<li><a href="pages/' + page.url + '">' + tmpPageTitle + '</a></li>'; return prev + '\n' + '<li><a href="pages/' + page.url + '">' + tmpPageTitle + '</a></li>';
}, '') + }, '') +
'</ol>' + '</ol>' +
@ -94,7 +94,7 @@ function _buildEbook(allPages) {
'</docTitle>' + '</docTitle>' +
'<navMap>' + '<navMap>' +
allPages.reduce(function(prev, page, index) { allPages.reduce(function(prev, page, index) {
var tmpPageTitle = escapeAmp(page.title); var tmpPageTitle = escapeXMLChars(page.title);
return prev + '\n' + return prev + '\n' +
'<navPoint id="ebook' + index + '" playOrder="' + (index + 1) + '">' + '<navPoint id="ebook' + index + '" playOrder="' + (index + 1) + '">' +
'<navLabel><text>' + tmpPageTitle + '</text></navLabel>' + '<navLabel><text>' + tmpPageTitle + '</text></navLabel>' +
@ -113,7 +113,7 @@ function _buildEbook(allPages) {
var pagesFolder = oebps.folder('pages'); var pagesFolder = oebps.folder('pages');
allPages.forEach(function(page) { allPages.forEach(function(page) {
var tmpPageTitle = escapeAmp(page.title); var tmpPageTitle = escapeXMLChars(page.title);
pagesFolder.file(page.url, pagesFolder.file(page.url,
'<?xml version="1.0" encoding="utf-8"?>' + '<?xml version="1.0" encoding="utf-8"?>' +
'<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">' + '<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">' +

View file

@ -167,7 +167,7 @@ function getAbsoluteUrl(urlStr) {
} else if (urlStr.indexOf('http') !== 0) { } else if (urlStr.indexOf('http') !== 0) {
absoluteUrl = currentUrl + '/' + urlStr; absoluteUrl = currentUrl + '/' + urlStr;
} }
absoluteUrl = escapeAmp(absoluteUrl); absoluteUrl = escapeXMLChars(absoluteUrl);
return absoluteUrl; return absoluteUrl;
} catch (e) { } catch (e) {
console.log('Error:', e); console.log('Error:', e);
@ -291,13 +291,18 @@ function generateRandomTag(tagLen) {
return text; return text;
} }
function escapeAmp(text) { function escapeXMLChars(text) {
var newText = text.replace(/&amp;/ig, '&'); return text.replace(/&/g, '&amp;')
newText = newText.replace(/&/ig, '&amp;'); .replace(/>/g, '&gt;')
return newText; .replace(/</g, '&lt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&apos;');
} }
function getEbookFileName(name) { function getEbookFileName(name) {
var newName = name.replace(/&amp;/ig, '&'); return name.replace(/&amp;/ig, '&')
return newName; .replace(/&gt;/ig, '')
.replace(/&lt;/ig, '')
.replace(/&quot;/ig, '')
.replace(/&apos;/ig, '');
} }