2010-12-12 19 views
4

ユーザーがアクセスするサイトごとに固有の情報を保存する必要があります。 (実際には見たサイトのサムネイルです)
このサムネイル(jpegファイル)は、後で見ることができるようにそのサイトがどのサイトを表しているかを示す名前が必要です。URLを有効なファイル名に変換してURLに戻す

urlから有効なファイル名に簡単に変換することをお勧めしますか?

例:www.ibm.comwww_ibm_comにマップできます。

URLが非常に複雑なクエリ文字列を持つ場合は、すべての有効なURLで常に動作するかどうかはわかりません。

使用できる良い正規表現またはC#ライブラリがありますか?

ありがとうございました。幸いです。

答えて

2

まず、「。」ということを指摘する価値があります。ファイル名では完全に合法ですが、 "/"はありません。したがって、引用する例では翻訳は必要ありませんが、 "www.ibm.com/path1/file1.jpg"となります。

単純なstring.Replaceは、ファイル名では合法だがURLでは違法な文字を見つけることができると仮定すると、ここでは最良の解決策になります。

string.Replace("/", "§"); 

は、ファイル名に変換すると::不正なURL文字は(URLでは合法でもよい)、 "§" であると仮定すると

は、あなたが持っている

string.Replace("§", "/"); 

翻訳し直してください。

This page on URL Encodingは、URLSの有効、無効、安全ではない(有効であるが特別な意味を持つ)文字を定義します。 ISO-Latinセット80-FFの16進数(128-255小数)の「上半分」の文字は合法ではありませんが、ファイル名では問題ありません。

無効なファイル名文字のセットに含まれるURLの各文字に対して、これを行う必要があります。これはGetInvalidFileNameCharsを使用して取得できます。あなたは、適切な文字のペアを見つけることができないと仮定すると

UPDATE

は、その後、別の解決策は、ルックアップテーブルを使用することです。一方の列には、生成された他方のファイル名のURLが格納されます。生成された名前が一意である限り(GUIDが行う)、一方向から他方向に向かうために双方向ルックアップを実行できます。

+0

@ChrisF - ファイル名に合法的なURL文字が何であるか知っていますか?私はあなたのアプローチを使用することができます私はリストを知っていた場合。見た目はどこ? –

+0

この方法には問題がある可能性があります。たとえば、 '。'文字が有効なファイル名の文字であるurlに存在していた場合、これはあいまいさにつながる可能性があります。 URLの特殊文字がどのように%を使ってASCII値に変換されるかのような何らかの規約を選択するのがベストでしょう。 –

+0

@Gunner - あなたが私の答えを読んだ場合、法的なファイル文字であるが違法なURLを見つけ出す必要があることを指摘します。この場合、URLには表示されないので、「/」を「/」に変換することは安全です。あなたはすべての違法な文字を繰り返す必要があります。 – ChrisF

1

実際には有効なファイル名です。もっと問題になるのはスラッシュです。したがって、URLにサブディレクトリが含まれている場合は、スラッシュを翻訳する必要があります。

主な問題は重複が可能です。たとえば、ibm.com/path1_path2とibm.com/path1/path2の両方が同じ値に変換されます。

私はChrisFの提案の中で、ファイル名には合法だがURLにはない文字を見つけるのが好きです。私の頭の上から外れている文字があれば、私には分かりません。

このような文字が見つからない場合は、そうではない可能性があります。

関連する問題