HttpUtility.HtmlEncode はすべてをエンコードするわけではありません 質問する

HttpUtility.HtmlEncode はすべてをエンコードするわけではありません 質問する

私は C# と .Net 3.5 のデスクトップ クライアント プログラムを使用して Web サーバーとやり取りしています。Web ブラウザーが送信するトラフィックを確認し、それをエミュレートするために Fiddler を使用しています。残念ながらこのサーバーは古く、文字セットと UTF-8 の概念について少し混乱しています。主に Latin-1 を使用しています。

「Ω π ℵ ∞ ♣ ♥ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓」のような「特殊」文字を含むデータを Web ブラウザーに入力すると、フィドラーは、それらの文字がブラウザーからサーバーに次のように送信されていることを示します。"♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ "

しかし、私のクライアントでは、HttpUtility.HtmlEncode はこれらの文字を変換せず、そのまま残します。"♈" を ♈ などに変換するには、何を呼び出す必要がありますか?

ベストアンサー1

リッチ・ストラールがブログ記事を投稿しました。System.Web を使用しない HTML および URI 文字列のエンコードここで、彼は文字の上限範囲をエンコードするカスタム コードもいくつか持っています。

/// <summary>
/// HTML-encodes a string and returns the encoded string.
/// </summary>
/// <param name="text">The text string to encode. </param>
/// <returns>The HTML-encoded text.</returns>
public static string HtmlEncode(string text)
{
    if (text == null)
        return null;

    StringBuilder sb = new StringBuilder(text.Length);

    int len = text.Length;
    for (int i = 0; i < len; i++)
    {
        switch (text[i])
        {

            case '<':
                sb.Append("&lt;");
                break;
            case '>':
                sb.Append("&gt;");
                break;
            case '"':
                sb.Append("&quot;");
                break;
            case '&':
                sb.Append("&amp;");
                break;
            default:
                if (text[i] > 159)
                {
                    // decimal numeric entity
                    sb.Append("&#");
                    sb.Append(((int)text[i]).ToString(CultureInfo.InvariantCulture));
                    sb.Append(";");
                }
                else
                    sb.Append(text[i]);
                break;
        }
    }
    return sb.ToString();
}

おすすめ記事