Skip to content

Commit cdfe616

Browse files
committed
unescape view names in region navigation
Ensures that view names containing diacritics, such as umlauts, are correctly resolved by unescaping the URI path during region navigation.
1 parent 68b8eea commit cdfe616

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

src/Maui/Prism.Maui/Navigation/Regions/Navigation/RegionNavigationContentLoader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ protected virtual string GetContractFromNavigationContext(NavigationContext navi
9191

9292
var candidateTargetContract = UriParsingHelper.EnsureAbsolute(navigationContext.Uri).AbsolutePath;
9393
candidateTargetContract = candidateTargetContract.TrimStart('/');
94-
return candidateTargetContract;
94+
return Uri.UnescapeDataString(candidateTargetContract);
9595
}
9696

9797
/// <summary>

src/Wpf/Prism.Wpf/Navigation/Regions/RegionNavigationContentLoader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ protected virtual string GetContractFromNavigationContext(NavigationContext navi
125125

126126
var candidateTargetContract = UriParsingHelper.GetAbsolutePath(navigationContext.Uri);
127127
candidateTargetContract = candidateTargetContract.TrimStart('/');
128-
return candidateTargetContract;
128+
return Uri.UnescapeDataString(candidateTargetContract);
129129
}
130130

131131
/// <summary>

tests/Maui/Prism.Maui.Tests/Fixtures/Common/UriParsingHelperFixture.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,27 @@ public void ParseForDeepLinkRelativeUri()
232232
Assert.Equal(_deepLinkRelativeUri, uri.OriginalString);
233233
Assert.False(uri.IsAbsoluteUri);
234234
}
235+
236+
[Theory]
237+
[InlineData("TestäöüView")]
238+
[InlineData("MøbëlList")]
239+
[InlineData("Ñoño")]
240+
public void GetAbsolutePathUnescapesDiacritics(string viewName)
241+
{
242+
var uri = UriParsingHelper.Parse(viewName);
243+
var absolutePath = UriParsingHelper.GetAbsolutePath(uri);
244+
var result = Uri.UnescapeDataString(absolutePath.TrimStart('/'));
245+
Assert.Equal(viewName, result);
246+
}
247+
248+
[Theory]
249+
[InlineData("TestäöüView")]
250+
[InlineData("MøbëlList")]
251+
public void GetUriSegmentsUnescapesDiacritics(string viewName)
252+
{
253+
var uri = new Uri(viewName, UriKind.Relative);
254+
var segments = UriParsingHelper.GetUriSegments(uri);
255+
var segmentName = UriParsingHelper.GetSegmentName(segments.Dequeue());
256+
Assert.Equal(viewName, segmentName);
257+
}
235258
}

0 commit comments

Comments
 (0)