diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs b/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs index ab1141fc6..825de9053 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs @@ -44,12 +44,19 @@ namespace Orchard.Tokens.Providers { .Chain("HtmlEncode", "Text", HttpUtility.HtmlEncode) .Token("JavaScriptEncode", HttpUtility.JavaScriptStringEncode) .Chain("JavaScriptEncode", "Text", HttpUtility.JavaScriptStringEncode) - .Token("LineEncode", text => text.Replace(System.Environment.NewLine, "
")) - .Chain("LineEncode", "Text", text => text.Replace(System.Environment.NewLine, "
")) + .Token("LineEncode", text => ReplaceNewLineCharacters(text)) + .Chain("LineEncode", "Text", text => ReplaceNewLineCharacters(text)) ; } + private static string ReplaceNewLineCharacters(string text) { + return text + .Replace("\r\n", "
") + .Replace("\r", "
") + .Replace("\n", "
"); + } + private static string FilterTokenParam(string tokenName, string token) { return token.StartsWith(tokenName, StringComparison.OrdinalIgnoreCase) ? token.Substring(tokenName.Length) : null; } @@ -69,7 +76,7 @@ namespace Orchard.Tokens.Providers { } private static string Limit(string token, string param) { - if(String.IsNullOrEmpty(token)) { + if (String.IsNullOrEmpty(token)) { return String.Empty; } diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs b/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs index 5643bb856..a66304a41 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs @@ -117,5 +117,13 @@ namespace Orchard.Tokens.Tests { var result = _tokenizer.Replace("{Text.LineEncode}", new { Text = str }, new ReplaceOptions { Encoding = ReplaceOptions.NoEncode }); Assert.That(result, Is.EqualTo("foo
bar
baz")); } + + [TestCase("foo\nbar", "foo
bar")] + [TestCase("foo\rbar", "foo
bar")] + [TestCase("foo\r\nbar", "foo
bar")] + public void TestLineEncodeWithNonWindowsStyleLineBreaks(string str, string expected) { + var result = _tokenizer.Replace("{Text.LineEncode}", new { Text = str }, new ReplaceOptions { Encoding = ReplaceOptions.NoEncode }); + Assert.That(result, Is.EqualTo(expected)); + } } } \ No newline at end of file