Fixes U4-1512 by using the same safe alias method as in the legacy code base.

This should ensure that published content aliases has the same format as in v4.
This commit is contained in:
Morten Christensen
2013-01-22 08:44:06 -01:00
parent f4574b6014
commit 72ff03f142
4 changed files with 55 additions and 5 deletions

View File

@@ -771,5 +771,54 @@ namespace Umbraco.Core
return newUrl;
}
/// <summary>
/// An extention method to ensure that an Alias string doesn't contains any illegal characters
/// which is defined in a private constant 'ValidCharacters' in this class.
/// Conventions over configuration, baby. You can't touch this - MC Hammer!
/// </summary>
/// <remarks>
/// Copied and cleaned up a bit from umbraco.cms.helpers.Casing.
/// </remarks>
/// <param name="alias">The alias.</param>
/// <returns>An alias guaranteed not to contain illegal characters</returns>
public static string ToSafeAlias(this string alias)
{
const string validAliasCharacters = "_-abcdefghijklmnopqrstuvwxyz1234567890";
const string invalidFirstCharacters = "01234567890";
var safeString = new StringBuilder();
int aliasLength = alias.Length;
for (int i = 0; i < aliasLength; i++)
{
string currentChar = alias.Substring(i, 1);
if (validAliasCharacters.Contains(currentChar.ToLower()))
{
// check for camel (if previous character is a space, we'll upper case the current one
if (safeString.Length == 0 && invalidFirstCharacters.Contains(currentChar.ToLower()))
{
currentChar = "";
}
else
{
if (i < aliasLength - 1 && i > 0 && alias.Substring(i - 1, 1) == " ")
currentChar = currentChar.ToUpper();
safeString.Append(currentChar);
}
}
}
return safeString.ToString();
}
public static string ToSafeAliasWithForcingCheck(this string alias)
{
if (UmbracoSettings.ForceSafeAliases)
{
return alias.ToSafeAlias();
}
return alias;
}
}
}