5

私のサイトでは、すべてのテキストがUTF-8として提供されています。

現在、すべてのブラウザでUnicode文字がサポートされているため、そのまま使用したいと思います。

asp.netフレームワークは、Unicodeをのような数値文字参照に置き換えることで非常に役立ちますá。参考のために:http://en.wikipedia.org/wiki/Unicode_and_HTML#HTML_document_characters

確かに、この方法では、ウェブページは可能な限り古いネットスケープで正しくレンダリングされますが、たとえば、Google Analyticsのeコマースモジュールでは、これらの特別にコード化された文字を理解するのに問題があります。

数値文字参照エンコーディングをグローバルに無効にする方法はありますか?

たとえば、私はかみそりで書きたいです:

<span class="title">@ViewBag.Title</span>

これを出力に表示したいと思います。

<span class="title">Számítástechnika</span>

これではない:

<span class="title">Sz&#225;m&#237;t&#225;stechnika</span>

私はhtmlエンコーディングを無効にしようとはしていないので、Html.Rawは解決策ではありません。たとえば、@ViewBag.Titleが次のような内容にならないようにすることはできません。

<span class="title"><script>alert('injected hahahah');</script></span>

だから私は特別なhtml文字の自動エンコーディングに満足しています。それは私が無効にしたいものではありません。

すべてのコードを再構築したくはありません。かみそりで文字列パラメーターを使用する際にこの種の動作を無効にする「グローバルスイッチ」が必要だと思いました。これを行う方法はありますか?

また、たとえば?のような数字の参照を明示的に禁止することはできますnew MvcHtmlString(myString, some parameters)か?

4

3 に答える 3

4

残念ながら、このエンコード機能をオフにすることはできません。この「便利な」機能はWebUtility.HtmlEncodeによって提供され、エンコーディングに影響を与えることはできません。

ただし、.net 4.0を開始すると、から継承するクラスを作成して web.cofig HttpRuntimeSection.EncoderTypeHttpEncoderで構成することで、エンコードの動作をカスタマイズできます。ただし、独自のカスタム エンコーディング ロジックを実装する必要があります。

幸いなことに、 .net 4.5には、 AntiXssEncoderと呼ばれる Unicode 文字を正しく処理しながらHttpEncoder、悪いもの ( など) をエンコードする新しいものが同梱されています。<script>

したがって、これを web.config に追加するだけです。

<system.web>
    <httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder, 
                             System.Web, Version=4.0.0.0, Culture=neutral, 
                             PublicKeyToken=b03f5f7f11d50a3a"/>    
</system.web>

まだ .net 4.5 を使用していない場合はAntiXssEncoderMicrosoft Web Protection Libraryを使用して実装できます。

設定方法の記事は次のとおりです: ASP.NET の既定のエンコーダーとして AntiXss を使用する(ただし、古い可能性があります)

于 2013-01-29T13:09:32.710 に答える
3

mvcのメソッドを使用することもでき@Html.Rawます。これは、既にビルドされたプロジェクトでグローバル レベルで実行したくない場合に便利です。

@Html.Raw(@ViewBag.Title)
于 2015-05-21T10:13:39.503 に答える
1

ConfigureServices.Net Core Web アプリケーションの場合、メソッドでデフォルトのエンコード動作を構成できます。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<WebEncoderOptions>(options => 
            {
                options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
            });
}

これにより、エンコードされていない Unicode 文字が html ページに表示されます。ソースhttps://github.com/aspnet/HttpAbstractions/issues/315

于 2021-06-12T14:46:21.330 に答える