diff --git a/src/services/export/markdown.spec.ts b/src/services/export/markdown.spec.ts index 1eccd25a0..17989d5ed 100644 --- a/src/services/export/markdown.spec.ts +++ b/src/services/export/markdown.spec.ts @@ -226,4 +226,16 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); + it("converts to character", () => { + const html = /*html*/`
Hello world.
`; + const expected = `Hello\u00a0world.`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + + it("preserves non-breaking space character", () => { + const html = /*html*/`Hello\u00adworld.
`; + const expected = `Hello\u00adworld.`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + }); diff --git a/src/services/import/markdown.spec.ts b/src/services/import/markdown.spec.ts index f3f9515f8..b8c0949bc 100644 --- a/src/services/import/markdown.spec.ts +++ b/src/services/import/markdown.spec.ts @@ -133,4 +133,16 @@ second line 2Hello world.
`; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); + + it("converts non-breaking space character to ", () => { + const input = `Hello\u00a0world.`; + const expected = /*html*/`Hello world.
`; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); + }); diff --git a/src/services/import/markdown.ts b/src/services/import/markdown.ts index 95ff3b124..57bf58dd6 100644 --- a/src/services/import/markdown.ts +++ b/src/services/import/markdown.ts @@ -87,6 +87,9 @@ function renderToHtml(content: string, title: string) { // Remove slash for self-closing tags to match CKEditor's approach. html = html.replace(/<(\w+)([^>]*)\s+\/>/g, "<$1$2>"); + // Normalize non-breaking spaces to entity. + html = html.replaceAll("\u00a0", " "); + return html; }