K Khan
Sep 19, 2024
visibility 1676
star star star star star
(1 votes)

keep special characters in URL

When creating a page, the default URL segment validation automatically replaces special characters with their standard equivalents (e.g., "ä" is replaced with "a"). However, some clients may require these special characters to remain intact in URLs for non-English versions of their website.

var validChars = "ü ö ä ß ó ñ á á é í ó ő ú ü ñ"; 

For CMS 12

//Startup.cs
services.Configure<UrlSegmentOptions>(config => {
    config.SupportIriCharacters = true;
    config.ValidCharacters = @"A-Za-z0-9\-_~\.\$" + validChars;
}); 

For CMS 11

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class UrlSegmentConfigurationModule : IConfigurableModule
{
    public void ConfigureContainer(ServiceConfigurationContext context)
    {
        var validChars = "ü ö ä ß ó ñ á á é í ó ő ú ü ñ"; 
        context.Services.RemoveAll<UrlSegmentOptions>();
        context.Services.AddSingleton<UrlSegmentOptions>(s => new UrlSegmentOptions
        {
            SupportIriCharacters = true,
            ValidCharacters = @"\p{L}0-9\-_~\.\$" + validChars
        });
    }

    public void Initialize(InitializationEngine context){}

    public void Uninitialize(InitializationEngine context) { }
}

References:

Sep 19, 2024

Comments

Mark Stott
Mark Stott Sep 20, 2024 08:18 AM

Hello Khan,

It's worth noting that the builtin Optimizely behaviour is in alignment with the current RFC 3986 URI (Uniform Resource Identifier) specification.  I've had issues before with non-compliant characters within URLs and iterpretation by the browser and documentation platforms with confusion of encoding.  In these cases I would personally recommend against this.

K Khan
K Khan Sep 20, 2024 08:25 AM

Make sense, thanks for sharing.

error Please login to comment.
Latest blogs
Add more scheduled job settings from the Optimizely CMS 12 admin UI -- with OptiScheduledJob.ExtraParameters

  Optimizely (EPiServer) CMS 12 ships a great scheduled-jobs framework, but it has one frustrating gap: a job has nowhere to store its own...

Binh Nguyen Thi | Jun 25, 2026

Automated Search & Navigation to Graph Migration with Claude Code

A Claude Code plugin that scans your S&N codebase, applies Graph SDK transformations, and validates the result. Install once, run one command. CMS ...

Connor Fortin | Jun 24, 2026

Migrating from Find to Graph: Lessons Learned from a Real CMS 13 Project

While migrating a search solution from Optimizely Search & Navigation (Find) to Optimizely Graph in CMS 13, I encountered several issues that were...

Binh Nguyen Thi | Jun 24, 2026

Optimizely: Upgrade Opti-ID and .NET 10 in CMS 12

Many Optimizely customers are planning their roadmap around a future migration to Optimizely CMS 13. As a result, upgrades such as Opti ID adoption...

Madhu | Jun 23, 2026 |