diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 11ee5b4eab..877928957a 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -239,8 +239,15 @@ namespace Umbraco.Core PropertyEditorValueConvertersResolver.Current.AddType(); PropertyEditorValueConvertersResolver.Current.AddType(); - ShortStringHelperResolver.Current = new ShortStringHelperResolver( + // this is how we'd switch over to DefaultShortStringHelper _and_ still use + // UmbracoSettings UrlReplaceCharacters... + //ShortStringHelperResolver.Current = new ShortStringHelperResolver( + // new DefaultShortStringHelper().WithConfig(DefaultShortStringHelper.ApplyUrlReplaceCharacters)); + + // use the Legacy one for now + ShortStringHelperResolver.Current = new ShortStringHelperResolver( new LegacyShortStringHelper()); + UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver( typeof (DefaultUrlSegmentProvider)); } diff --git a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs index af0bcbbaf3..f60265940d 100644 --- a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs +++ b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs @@ -20,6 +20,11 @@ namespace Umbraco.Core.Strings { #region Ctor and vars + static DefaultShortStringHelper() + { + InitializeLegacyUrlReplaceCharacters(); + } + /// /// Freezes the helper so it can prevents its configuration from being modified. /// @@ -46,6 +51,33 @@ namespace Umbraco.Core.Strings #endregion + #region Legacy UrlReplaceCharacters + + static readonly Dictionary UrlReplaceCharacters = new Dictionary(); + + static void InitializeLegacyUrlReplaceCharacters() + { + var replaceChars = UmbracoSettings.UrlReplaceCharacters; + foreach (var node in replaceChars.SelectNodes("char").Cast()) + { + var org = node.Attributes.GetNamedItem("org"); + if (org != null && org.Value != "") + UrlReplaceCharacters[org.Value] = XmlHelper.GetNodeValue(node); + } + } + + /// + /// Returns a new string in which characters have been replaced according to the Umbraco settings UrlReplaceCharacters. + /// + /// The string to filter. + /// The filtered string. + public static string ApplyUrlReplaceCharacters(string s) + { + return s.ReplaceMany(UrlReplaceCharacters); + } + + #endregion + #region Configuration private void EnsureNotFrozen() diff --git a/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs b/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs index 2ad40342a6..25be58b102 100644 --- a/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs +++ b/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Strings internal ShortStringHelperResolver(IShortStringHelper helper) : base(helper) { - Resolution.Frozen += (sender, args) => helper.Freeze(); + Resolution.Frozen += (sender, args) => Value.Freeze(); } ///