スペース、アンパサンドなどのさまざまな文字を持つWebサーバー(人物をアップロードする)には、奇妙なドキュメント名が格納されます。これらのドキュメントへのリンクを生成するときには、サーバーからエスケープする必要があります。ファイルを生の名前でデータベースに格納します。ただし、組み込みの.NETエスケープ関数は、すべての場合に正しく動作しません。.NETでどのようにドキュメント名を正しくエスケープしますか?
文書Hello#There.docx
ください:しかし、正しくUrlEncode
ますないハンドルHello There.docx
HttpUtility.UrlEncode("Hello#There");
"Hello%23There"
を::
HttpUtility.UrlEncode("Hello There.docx");
"Hello+There.docx"
+
シンボルにのみ有効です
UrlEncode
はこれを正しく処理されますがURLパラメータではなく、dドキュメント名。面白いことに、これは実際にVisual StudioテストWebサーバーでは動作しますが、IISでは動作しません。
UrlPathEncode
機能は、スペースのため正常に動作します:
HttpUtility.UrlPathEncode("Hello There.docx");
"Hello%20There.docx"
しかし、そのような#
文字として他の文字をエスケープしません。
HttpUtility.UrlPathEncode("Hello#There.docx");
"Hello#There.docx"
#
は次のように解釈されるように、このリンクは無効です。 URLハッシュはサーバーに到達しません。
文書名に英数字以外のすべての文字をエスケープする.NETユーティリティーメソッドがありますか、それとも独自に記述する必要がありますか?
ユーザーが同じ名前のファイルをアップロードすると、dupsはどのように処理されますか? (例えばguidのような)名前を機械で生成し、親しみやすいユーザ提供の名前を(生成されたファイル名と共に)データベースに格納する方が簡単ではないでしょうか? –
あなたはおそらく、[1] [パスとファイル名からの不正な文字を削除]このような何かを必要とする[1]:http://stackoverflow.com/questions/146134/how-to-remove-illegal-characters -from-path-and-filenames –
@KirkWoll - 良い質問:) URL *は実際には '/ Docs/12345/My File.docx'のように見えます - 12345はユニークなキーですが、IEの" Save As "ダイアログで、最初にアップロードしたのと同じ名前のファイルを保存します。私たちはまた、ファイル名がキーと一致することを確認して、人々がランダムな文書を推測するのを防ぐ(そうではなく、100%安全ですが十分に良い)。 –