次のコードでは、postSummary.SEOFriendlyTitleInURL に中国語の文字が含まれている場合、それらの文字は URL でエンコードされます。
@Html.ActionLink(
postSummary.Title,
"View",
new
{
id = postSummary.Id,
friendlyTitle = postSummary.SEOFriendlyTitleInURL
})
その URL は、Google Chrome および Firefox では元の文字として表示されますが、IE ではエンコードされた文字列です。エンコードされていない文字をアドレスバーに直接入力できるため、ActionLink メソッドのデフォルトのエンコード動作を防止したいと考えています。したがって、それらは URL では合法であると思います。
リンクを手動で簡単に作成できますが、一貫性を保つために生成する方がよいでしょう。
<a href="/post/@postSummary.SEOFriendlyTitleInURL/@postSummary.Id">@postSummary.Title</a>
編集:
私の現在の解決策: フレームワークが非 ASCII 文字だけをエンコードするのを防ぐ代わりに、Server.UrlDecode メソッドと組み合わせた Html.ActionLink を使用して、文字をエンコードしないように指示します。パーセントでエンコードする必要がある文字がある場合、それらは「friendlyTitle」フラグメントにのみ表示されます。そのフラグメントは読みやすさのためにのみ使用されるため、そのような文字をダッシュ文字に置き換えます。
そのような置き換えられた文字を含む
- URI の予約文字のリスト。https://www.rfc-editor.org/rfc/rfc3986#section-2.2を参照
- 一重引用符と二重引用符
- タブ文字
それでも、ASCII 以外の文字は URI では有効ではないため、ある時点でパーセント エンコードする必要があります。URL の生成時に行うことをお勧めします。しかし、漢字を含む URL を介してページを要求するときに Fiddler を観察すると、URL は自動的に (おそらく Web ブラウザーによって) エンコードされるようです。読みやすくするために、Web ブラウザーにエンコード作業を行わせることにしました。