ユーザーが入力した名前からファイル名を生成する必要があります。これらの名前はどの言語でもかまいません。例えば:
- "ジョンスミス"
- 「高岡和子」
- "محمدسعيدبنعبدالعزيزالفلسطيني"
これらは入力値を使用しているため、ファイル名に無効な文字が名前に含まれていないことを保証するものではありません。
ユーザーはブラウザからこれらのファイルをダウンロードするため、ファイル名がすべての構成のすべてのオペレーティングシステムで有効であることを確認する必要があります。
私は現在、単純な正規表現ですべての英数字以外の文字を削除することにより、英語圏の国でこれを行っています。
string = string.replaceAll("[^a-zA-Z0-9]", "");
string = string.replaceAll("\\s+", "_")
いくつかの変換例:
- 「ジョン・スミス」->「John_Smith.ext」
- "John O'Henry"-> "John_OHenry.ext"
- 「ジョン・ヴァン・スミスIII」->「John_van_Smith_III.ext」
明らかに、これは国際的には機能しません。
すべてのファイルシステムで無効なすべての文字のブラックリストを見つけて生成し、名前からそれらを取り除くことを検討しました。包括的なリストを見つけることができませんでした。
可能であれば、共通のライブラリにある既存のコードを使用したいと思います。これはすでに解決された問題だと思いますが、国際的に機能する解決策を見つけることができません。
ファイル名は、ファイルをダウンロードするユーザー用であり、私用ではありません。これらのファイルを保存するつもりはありません。これらのファイルは、データベース内のデータからの要求に応じてサーバーによって動的に生成されます。ファイル名は、ファイルをダウンロードする人の便宜のためのものです。