HttpUtility.UrlEncodeコード書き換え

4235 ワード

1.いくつかのシステム方法、例えば.NETシステムの方法UrlEncodeは「=」を%3 Dではなく「%3 d」に符号化し、暗号化署名が検証に通じないため、開発者に注意して確認してください.
2.Java 1.3および以前のバージョンではjavaが呼び出された.net.URLEncoderの下の方法でURL符号化を行う場合、アスタリスク(*)などの特殊な文字は符号化されません.URL符号化ルールではアスタリスク(*)が符号化されなければならないことが規定されているため、要求文字列にアスタリスク(*)が含まれている場合、上記の方法を使用すると、生成された署名が検証できなくなります.例えばv3/pay/buy_goodsインタフェースを呼び出す場合、payitemパラメータ値には必ず*が含まれ、クラスjavaを使用する.net.URLEncoderの下の方法で符号化した後、開発者が手動でアスタリスク文字「*」を「%2 A」に置き換える必要があります.そうしないと、暗号化署名が検証に直通しません.開発者は注意してください.
3.一部の言語のurlencodeメソッドでは、「スペース」を「+」に符号化し、実際には「%2 B」に符号化する必要があります.これにより、誤った署名が生成され、署名が検証に失敗します.開発者は「+」を手動で「%2 B」に置き換えることに注意してください.PHPでは、rawurlencodeメソッドによるURL符号化を推奨します.
以下に、UrlEncodeへのc#言語の書き換えについて説明します.
        /// <summary>

        /// UrlEncode : , 

        /// </summary>

        /// <param name="strSrc"> </param>

        /// <param name="encoding"> </param>

        /// <param name="bToUpper"> </param>

        /// <returns></returns>

        private string UrlEncode(string strSrc, System.Text.Encoding encoding, bool bToUpper)

        {

            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();

            for (int i = 0; i < strSrc.Length; i++)

            {

                string t = strSrc[i].ToString();

                string k = HttpUtility.UrlEncode(t, encoding);

                if (t == k)

                {

                    stringBuilder.Append(t);

                }

                else

                {

                    if (bToUpper)

                        stringBuilder.Append(k.ToUpper());

                    else

                        stringBuilder.Append(k);

                }

            }

             if (bToUpper)
return stringBuilder.ToString().Replace("+", "%2B"); else
return stringBuilder.ToString();
}

string org_loc = this.UrlEncode("/dfdasf/get_api_m", Encoding.UTF8, true);