From 25cce2a0d66b2bf8c49e56b616fd1878114dc7a4 Mon Sep 17 00:00:00 2001 From: AlexejLiebenthal Date: Wed, 28 Feb 2018 23:09:00 +0100 Subject: [PATCH] Fixed html encoding bug with umlauts and special characters --- .../Core/Html/HtmlEncodedTextWriter.cs | 32 +++++++++++++++++++ .../Core/Html/HtmlFromXamlConverter.cs | 2 +- .../RichTextBox/Formatters/XamlFormatter.cs | 4 +-- .../Xceed.Wpf.Toolkit.csproj | 1 + .../Formatters/HtmlFormatterTests.cs | 8 ++--- 5 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlEncodedTextWriter.cs diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlEncodedTextWriter.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlEncodedTextWriter.cs new file mode 100644 index 00000000..17e5fc71 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlEncodedTextWriter.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Xml; + +namespace Xceed.Wpf.Toolkit.Core.Html +{ + public class HtmlEncodedTextWriter : XmlTextWriter + { + private readonly XmlTextWriter _textWriter; + + public HtmlEncodedTextWriter(TextWriter w) : base(w) + { + _textWriter = this; + } + + #region Overrides of XmlTextWriter + + + /// + public override void WriteString(string text) + { + text = WebUtility.HtmlEncode(text); + _textWriter.WriteRaw(text); + } + + #endregion + } +} diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlFromXamlConverter.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlFromXamlConverter.cs index 9ea817d6..ec54fd8d 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlFromXamlConverter.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Html/HtmlFromXamlConverter.cs @@ -43,7 +43,7 @@ namespace Xceed.Wpf.Toolkit.Core.Html xamlReader = new XmlTextReader(new StringReader(xamlString)); htmlStringBuilder = new StringBuilder(100); - htmlWriter = new XmlTextWriter(new StringWriter(htmlStringBuilder)); + htmlWriter = new HtmlEncodedTextWriter(new StringWriter(htmlStringBuilder)); if (!WriteFlowDocument(xamlReader, htmlWriter)) { diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBox/Formatters/XamlFormatter.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBox/Formatters/XamlFormatter.cs index 30ed667a..56462e29 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBox/Formatters/XamlFormatter.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/RichTextBox/Formatters/XamlFormatter.cs @@ -33,7 +33,7 @@ namespace Xceed.Wpf.Toolkit using( MemoryStream ms = new MemoryStream() ) { tr.Save( ms, DataFormats.Xaml ); - return ASCIIEncoding.Default.GetString( ms.ToArray() ); + return Encoding.UTF8.GetString( ms.ToArray() ); } } @@ -50,7 +50,7 @@ namespace Xceed.Wpf.Toolkit else { TextRange tr = new TextRange( document.ContentStart, document.ContentEnd ); - using( MemoryStream ms = new MemoryStream( Encoding.ASCII.GetBytes( text ) ) ) + using( MemoryStream ms = new MemoryStream( Encoding.UTF8.GetBytes( text ) ) ) { tr.Load( ms, DataFormats.Xaml ); } diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.csproj b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.csproj index 3a2191d7..0e088b70 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.csproj +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Xceed.Wpf.Toolkit.csproj @@ -395,6 +395,7 @@ + diff --git a/ExtendedWPFToolkitSolution/Tests/Xceed.Wpf.Toolkit.Tests/RichTextBox/Formatters/HtmlFormatterTests.cs b/ExtendedWPFToolkitSolution/Tests/Xceed.Wpf.Toolkit.Tests/RichTextBox/Formatters/HtmlFormatterTests.cs index 8d46e1e9..e775fb0f 100644 --- a/ExtendedWPFToolkitSolution/Tests/Xceed.Wpf.Toolkit.Tests/RichTextBox/Formatters/HtmlFormatterTests.cs +++ b/ExtendedWPFToolkitSolution/Tests/Xceed.Wpf.Toolkit.Tests/RichTextBox/Formatters/HtmlFormatterTests.cs @@ -16,14 +16,14 @@ namespace Xceed.Wpf.Toolkit.Tests public FlowDocument CreateSimpleFlowDocument() { - var r = new Run("Hallo Welt!"); + var r = new Run("Hallo Welt! ÄÖÜ äöü ^ \" ß ' & <>"); var b = new Bold(r); var p = new Paragraph(b); return new FlowDocument(p); } public string CreateSimpleHtml() => - "

Hallo Welt!

"; + "

Hallo Welt! ÄÖÜ äöü ^ " ß ' & <>

"; [Test] public void GetText_ShouldReturnAHtmlText() @@ -33,7 +33,7 @@ namespace Xceed.Wpf.Toolkit.Tests var actual = sut.GetText(doc); - const string expectedText = "Hallo Welt!"; + const string expectedText = "Hallo Welt! ÄÖÜ äöü ^ " ß ' & <>"; const string expectedBoldStyle = "bold"; const string expectedHtmlTag = ""; @@ -56,7 +56,7 @@ namespace Xceed.Wpf.Toolkit.Tests var actual = new XamlFormatter().GetText(doc); - const string expectedText = "Hallo Welt!"; + const string expectedText = "Hallo Welt! ÄÖÜ äöü ^ \" ß ' & <>"; const string expectedBoldStyle = "Bold"; const string expectedSection = "Section";