1. ホーム
  2. c#

[解決済み] C#によるURLエンコード

2022-03-23 23:20:46

質問

私は、VBフォーラムソフトウェアにPOSTリクエストを送信し、(クッキーや何かを設定せずに)誰かをログインさせるアプリケーションを持っています。

ユーザーがログインしたら、そのユーザーのローカルマシンにパスを作成する変数を作成します。

c:♪tempfolder ♪date ♪username

問題は、一部のユーザー名が "Illegal chars" 例外をスローすることです。例えば、私のユーザー名が mas|fenix という例外が発生します。

Path.Combine( _      
  Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData), _
  DateTime.Now.ToString("ddMMyyhhmm") + "-" + form1.username)

文字列から削除するわけではないのですが、サーバーにFTPで自分のユーザー名のフォルダが作成されます。そして、これが2つ目の質問につながります。サーバー上にフォルダを作成する場合、"inlegal chars"を入れたままにしておいていいのでしょうか?サーバーはLinuxベースで、Linuxがそれを受け入れるかどうか分からないので、私はこれを尋ねるだけです。

EDIT: URLエンコードは私が欲しいものではなさそうです。以下は、私がやりたいことです。

old username = mas|fenix
new username = mas%xxfenix

ここで、%xxはASCII値、またはその文字を容易に識別できるその他の値です。

どのように解決するのですか?

編集:この回答は現在では古くなっていることに注意してください。参照 Siarhei Kuchukの回答は以下の通りです。 より良い修正方法

UrlEncodingは、あなたがここで提案していることを実行します。C# では、単に HttpUtility は、前述のとおりです。

不正な文字を Regex してから置換することもできますが、正しい文字に置換するために何らかのステートマシン (switch ... case など) が必要になるため、はるかに複雑になります。というのも UrlEncode はこれを前面に押し出すので、むしろ簡単です。

LinuxとWindowsの違いについては、Linuxで使えてWindowsで使えない文字がありますが、Url文字列をデコードしてフォルダ名を返すことができるので、気にすることはないでしょう。 UrlDecode ということで、変更点は丸投げでOKです。