「C#でUrlEncodeとUrlDecode」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
C#というか[[.NET]]にはUrlEncodeとUrlDecodeの統一的な方法がない。標準的に行う方法は、バージョンごと、プラットフォームごとに方法が異なりすぎて悲惨なことになっている。
+
C#というか.NETにはUrlEncodeとUrlDecodeの統一的な方法がない。標準的に行う方法は、バージョンごと、プラットフォームごとに方法が異なりすぎて悲惨なことになっている。
 
 
こんなもんStringクラスの拡張メソッドでいいだろ。アホか。
 
  
 
<syntaxhighlight lang="csharp">
 
<syntaxhighlight lang="csharp">
  
  
    public static class StringExtensions
+
public static string UrlEncode( string s , Encoding enc )
    {
+
{
        public static string UrlEncode(this string str, Encoding enc)
+
var rt = new StringBuilder();
        {
+
foreach ( byte i in enc.GetBytes( s ) )
            var rt = new StringBuilder();
+
{
            foreach (byte i in enc.GetBytes(str))
+
if ( i == 0x20 )
            {
+
{
                if (i == 0x20)
+
rt.Append( '+' );
                {
+
}
                    rt.Append('+');
+
else if ( (0x30 <= i && i <= 0x39) || (0x41 <= i && i <= 0x5a) || (0x61 <= i && i <= 0x7a) )
                }
+
{
                else if ((0x30 <= i && i <= 0x39) || (0x41 <= i && i <= 0x5a) || (0x61 <= i && i <= 0x7a))
+
rt.Append( (char)i );
                {
+
}
                    rt.Append((char)i);
+
else
                }
+
{
                else
+
rt.Append( "%" + i.ToString( "X2" ) );
                {
+
}
                    rt.Append("%" + i.ToString("X2"));
+
}
                }
+
return rt.ToString();
            }
+
}
            return rt.ToString();
 
        }
 
  
        public static string UrlDecode(this string str, Encoding enc)
+
</syntaxhighlight>
        {
+
<syntaxhighlight lang="csharp">
            var bytes = new List<byte>();
+
public static string UrlDecode( string s , Encoding enc )
            for (int i = 0; i < str.Length; i++)
+
{
            {
+
var bytes = new List<byte>();
                char c = str[i];
+
for ( int i = 0; i < s.Length; i++ )
                if (c == '%')
+
{
                {
+
char c = s[i];
                    bytes.Add((byte)int.Parse(str[++i].ToString() + str[++i].ToString(), System.Globalization.NumberStyles.HexNumber));
+
if ( c == '%' )
                }
+
{
                else if (c == '+')
+
bytes.Add( (byte)int.Parse( s[++i].ToString() + s[++i].ToString() , System.Globalization.NumberStyles.HexNumber ) );
                {
+
}
                    bytes.Add((byte)0x20);
+
else if ( c == '+' )
                }
+
{
                else
+
bytes.Add( (byte)0x20 );
                {
+
}
                    bytes.Add((byte)c);
+
else
                }
+
{
            }
+
bytes.Add( (byte)c );
            return enc.GetString(bytes.ToArray(), 0, bytes.Count);
+
}
        }
+
}
    }
+
return enc.GetString( bytes.ToArray() , 0 , bytes.Count );
 +
}
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
[[category: .NET]]
 

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)