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