0

目的のディレクトリ名に基づいてディレクトリを作成するようにコードを設定しているので、ユーザーはhtmlを使用してディレクトリ名を選択し、名前に基づいて作成されます。明らかな問題は、?)(#$ ^&^%$#@ / |] [{} <>、。またはユニコード文字。特定の文字をURL内に含めることは許可されていません。

文字列をテストして、不正な文字を_または''に置き換えるにはどうすればよいですか?

これがこれまでのコードです

//Removes illegal characters
$game_name = preg_replace('/[^a-zA-Z0-9/-]/','',$game_name);
//grab current directory name
$currentdirname = dirname(__file__);

//create new directory that uses game_name and current_directory
$game_directory = $currentdirname . '/' . $game_name;

//creates directory
mkdir($game_directory, 0700);
4

2 に答える 2

1

単に既存のコードの拡張:

$game_name = preg_replace('/[?()#$^&%@\/|\[\]{}<>.,\\\]/', '_', $game_name);

ただし、異なる環境および同じ環境内の異なるファイルシステムではファイル/ディレクトリ名の要件が異なるため、英数字以外のすべての文字を空白に置き換える方が安全です。

于 2012-04-18T03:06:54.177 に答える
1

アリエルによるほぼ良い答え。彼は、Windows辞書の不正な文字であるコロン':'と引用符'"'を見逃しました。これは、WindowsNTFSディレクトリで文字列を安全にする更新バージョンです。

$game_name = preg_replace('/[?()#$:"^&%@\/|\[\]{}<>.,\\\]/', '_', $game_name);
于 2012-06-27T21:40:02.780 に答える