2012-02-26 27 views
3

私は、「O」のような文字を直接印刷することにしたいが、出力はそれが正しい文字を表示されませんHtml.Encode()を通過する場合、ソース「O」にø特殊文字が

として表示されますしかしconfigにø

は私が持っている

​​

出典:

<li><%: Html.ActionLink("Støvletter", "ListProducts", "Tag", new { tag = "Stovletter" }, null)%></li> 

この出力:

<li><a href="/Tag/Stovletter">St&#248;vletter</a></li> 

しかし、出力は次のようになります。あなたは(私は絶対反対をお勧めします)独自のカスタムHTMLエンコードのルーチンをロールしない限り、私の知る限り、これは可能ではない

<li><a href="/Tag/Stovletter">Støvletter</a></li> 
+0

この場合、「ソース」とは何ですか?より多くの文脈を提供する必要があります。 –

+0

ソースと出力を更新しました。 – OMGKurtNilsen

+0

@DarinDimitrov:Html.Encode()で文字列を実行すると、文字通り "ø"という文字列がユーザーに表示されるためです。 – OMGKurtNilsen

答えて

1

あなたがHTMLの代わりに<%=で出力を作成しようとすることができます(<%:

をエンコードあなたの肯定的なコメントの後に私のコメントに投稿します)

+1

私はそれが正しい選択である状況を考え出すのに苦労しています。むしろ 'IHtmlString'、' HtmlString'または 'MvcHtmlString'を使用したいと思います。 – CodesInChaos

+0

私はHtml.ActionLink()を使用している以外のすべての場所で自分の問題を解決したので、受け入れられた答えとしてこれを選択しました – OMGKurtNilsen

1

結果のHTMLが正しく、文字がクライアントブラウザに正しく表示されています。 HTMLは、人間ではなく人間が読める形式に提示するために、プログラム(Webブラウザ)によって読み取られることを意図しています。

<li><a href="/Tag/Stovletter">St&#248;vletter</a></li> 

クライアントブラウザ上でこのように表示されます完全に有効なHTMLである:

enter image description here

+1

html/xmlで特別な意味を持たないエンティティエンコード文字はかなりばかげたIMOです。だから我々はUTF8を持っている。確かに有効ですが、IMOは非常に醜いです。 – CodesInChaos

+0

また、IMO人間の可読性はhtmlの特徴です。そうでなければ、よりコンパクトで解析しやすいバイナリ形式を使用することができました。 – CodesInChaos

+0

@CodeInChaos、ユーザエージェントは人間のように 'ugliness'という概念を本当に持っていません:-)彼らはマークアップの妥当性の概念を理解しています。限り、バイナリ形式に関しては、これはまさにプロダクションであなたのサイトで何をすべきか=>すべての空白を削除し、それをgzipします。最近http://google.comのHTMLソースコードを見ましたか? –

3

これはあなたの答えではないかもしれませんそれにもかかわらず興味深いものです。

あなたはそれがデフォルトの代わりに使用するcustomHtmlEncodersWebUtility.HtmlEncode

のための準備を行いHttpEncoderソースコードを見れば、私は周りに演奏し、マイクロソフトからHtmlEncoder called AntiXSSは、これらの文字を正しくエンコードを発見しました。

私はNugetを使用してそれをインストール:その後、

PM> Install-Package AntiXSS 

、そのように私のweb.configを更新:通常の出力とHtml.ActionLinksの両方が動作するようには思え

<system.web> 
    <httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, 
AntiXssLibrary" /> 
    .... 
</system.web> 

+0

リポジトリに正しいソースコードファイルが見つかりません。あなたはリンクを投稿できますか?私が見つけた関数は異なって呼び出され、デフォルトでは小さなホワイトリストにない文字もすべてエンコードされていました。 – CodesInChaos

+0

@ CodeInChaos、Resharper'sを使ってMicrosoftのサーバーからコードを自動的にダウンロードしました。以下は、私が見ている 'WebUtility.Encode'のコードのスニペットです:http://tinyurl.com/75j3njm、74-81行を参照してください。 φ値248に変換されて符号化される。この動作のためには、コードは 'ENTITY_ENCODE_HIGH_ASCII_CHARS'コンパイラ指令でコンパイルされていなければなりません。 –