テストの結果、Linuxでは/
とnull(\0
)を除くファイル名のすべての文字が許可されていることがわかりました。では、ファイル名で許可してはならないシーケンスは何ですか?主要な-
が一部のコマンドラインプログラムを混乱させる可能性があると聞きましたが、これは私には関係ありませんが、他の人が大量のファイルを収集してそれをいくつかのGNUプログラム。
先頭と末尾のスペースを削除するように提案されましたが、通常、ユーザーが先頭/末尾のスペースを使用するつもりはないという理由だけで削除する予定です。
どのような問題のあるシーケンスが存在する可能性があり、どのシーケンスを許可しないことを検討する必要がありますか?また、便宜上、ウィンドウ内で違法な文字を許可しないことも検討しています。最初はダッシュを許可しないかもしれないと思います(ダッシュは正当なウィンドウ文字です)
「有効」なものの決定は、OSとファイルシステムドライバに任せます。ユーザーが好きなように入力して、それを渡すことができます。 OSからのエラーを適切な方法で処理します。例外は、先頭と末尾のスペースを削除するのが合理的だと思います。スペースが埋め込まれたファイル名、先頭のダッシュ、疑問符が含まれるファイル名を作成する必要があり、選択したファイルシステムで許可されている場合、それらを防止するのはあなた次第ではありません。
ファイル名の有効な文字に関して異なるルールを持つ異なるマウントポイント(またはWindowsのドライブ)に異なるファイルシステムをマウントすることが可能です。アプリケーション内でこの種の処理を行うのは、OSがすでに行っているため、必要以上に手間がかかります。
あなたは主にLinuxに興味があるように思われるので、避けるべきことの1つは、(一般的な)シェルがワイルドカードなどとして解釈しようとする文字です。主張すれば「*」という名前のファイルを作成することもできますが、それをあまり評価しないユーザーがいる可能性があります。
ユーザーに自分でファイルを作成するように依頼する必要があるアプリケーションを開発していますか?それがあなたがしていることであるならば、あなたはあなたのアプリケーションで規則を設定することができます。 (たとえば、[a-zA-Z0-9_。]のみを許可し、残りの特殊文字を拒否します。)これは実施がはるかに簡単です。
ホワイトリスト文字のセットの使用をお勧めします。一般に、ファイル名の記号は人々を苛立たせます。
必ず、a-z0-9および0x80を超えるUnicode文字の使用を許可してください。ただし、&や、などの任意の記号を許可しないと、多くの煩わしさや不適切な場所でのフルストップが発生します。
許可しても安全なASCII記号は次のとおりです:フルストップアンダースコアハイフン
ファイル名に他のASCII記号を許可すると、問題が発生します。
ファイル名もASCII記号で始めてはなりません。ファイル名のスペースに関するポリシーは、ユーザーが使用できると期待する可能性があるため注意が必要ですが、一部のファイル名は明らかにばかげています(スペースで始まるファイル名など)。
ファイル名として使用するすべての文字列をurlencodeすると、長さだけを気にする必要があります。 この回答 読む価値があるかもしれません。