Skip to content

Commit

Permalink
URLエンコードの結果が大文字となるように修正
Browse files Browse the repository at this point in the history
  • Loading branch information
onihusube committed May 4, 2022
1 parent b782e7f commit b1cb47c
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions 2chAPIProxy/DatProxy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1014,6 +1014,21 @@ private string CreatePostsignature(Dictionary<string, string> post_filed, string
}
}

/// <summary>
/// 結果が正しく大文字となるように、パーセントエンコーディングを行う
/// 例えば、%a0 -> %A0 となるようにする
/// </summary>
/// <param name="input">入力文字列</param>
/// <param name="encoding">元の文字列のエンコーディング指定</param>
/// <returns>パーセントエンコーディング済み文字列</returns>
private string URLEncode(string input, Encoding encoding)
{
// HttpUtility.UrlEncodeの結果は%xxのxxが小文字になる
// RFC的には大文字が正しいらしい
string lowerstr = HttpUtility.UrlEncode(input, encoding);
return Regex.Replace(lowerstr, @"%[\x00-\xFF]{2}", m => m.Value.ToUpperInvariant());
}

private string ReConstructPostField(Dictionary<string, string> post_filed_map, Encoding dst_encoding)
{
string postfield = "";
Expand All @@ -1024,14 +1039,14 @@ private string ReConstructPostField(Dictionary<string, string> post_filed_map, E
// データが送られてきてる場合のみ追加(無い場合に空文字を追加しない)
if (post_filed_map.ContainsKey(key))
{
postfield += $"{key}={HttpUtility.UrlEncode(post_filed_map[key], dst_encoding)}&";
postfield += $"{key}={URLEncode(post_filed_map[key], dst_encoding)}&";
}
}

// 順序指定が無いものは送られてきた順序で(ほんまか?Dictionalyの内部順序って何??)
foreach (var kvpair in post_filed_map.Where(kv => !PostFieldOrederArray.Contains(kv.Key)))
{
postfield += $"{kvpair.Key}={HttpUtility.UrlEncode(kvpair.Value, dst_encoding)}&";
postfield += $"{kvpair.Key}={URLEncode(kvpair.Value, dst_encoding)}&";
}

// 余分にくっついてるのを削除
Expand Down

1 comment on commit b1cb47c

@onihusube
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#2

Please sign in to comment.