diff --git a/src/Umbraco.Core/IO/IOHelper.cs b/src/Umbraco.Core/IO/IOHelper.cs index adaf4280e2..8ecb0c15fe 100644 --- a/src/Umbraco.Core/IO/IOHelper.cs +++ b/src/Umbraco.Core/IO/IOHelper.cs @@ -8,6 +8,7 @@ using System.IO; using System.Configuration; using System.Web; using System.Text.RegularExpressions; +using System.Xml; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; @@ -277,6 +278,20 @@ namespace Umbraco.Core.IO filePath = String.Empty; } + //Break up the file in name and extension before applying the UrlReplaceCharacters + var fileNamePart = filePath.Substring(0, filePath.LastIndexOf('.')); + var ext = filePath.Substring(filePath.LastIndexOf('.')); + + //Because the file usually is downloadable as well we check characters against 'UmbracoSettings.UrlReplaceCharacters' + XmlNode replaceChars = UmbracoSettings.UrlReplaceCharacters; + foreach (XmlNode n in replaceChars.SelectNodes("char")) + { + if (n.Attributes.GetNamedItem("org") != null && n.Attributes.GetNamedItem("org").Value != "") + fileNamePart = fileNamePart.Replace(n.Attributes.GetNamedItem("org").Value, XmlHelper.GetNodeValue(n)); + } + + filePath = string.Concat(fileNamePart, ext); + // Adapted from: http://stackoverflow.com/a/4827510/5018 // Combined both Reserved Characters and Character Data // from http://en.wikipedia.org/wiki/Percent-encoding diff --git a/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs index 3f0495cfd5..dff000acc2 100644 --- a/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs +++ b/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs @@ -523,7 +523,8 @@ namespace Umbraco.Core.Persistence.Querying protected bool IsFieldName(string quotedExp) { - return true; + //Not entirely sure this is reliable, but its better then simply returning true + return quotedExp.LastIndexOf("'", StringComparison.InvariantCultureIgnoreCase) + 1 != quotedExp.Length; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index f4a3cf6d07..c46dd0d901 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -198,7 +198,7 @@ namespace Umbraco.Core.Services { using (var repository = _repositoryFactory.CreateContentRepository(_uowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Level == level && x.Path.Contains("-20") == false); + var query = Query.Builder.Where(x => x.Level == level && !x.Path.StartsWith("-20")); var contents = repository.GetByQuery(query); return contents; diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 0da6a10f13..ebe681259d 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -156,7 +156,7 @@ namespace Umbraco.Core.Services { using (var repository = _repositoryFactory.CreateMediaRepository(_uowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Level == level && x.Path.Contains("-21") == false); + var query = Query.Builder.Where(x => x.Level == level && !x.Path.StartsWith("-21")); var contents = repository.GetByQuery(query); return contents;