3

私はこれを使用して、ランダムな 12 文字の文字列を性別付けしています。

//  lost-in-code.com/programming/php-code/php-random-string-with-numbers-and-letters
$ch = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@$%^&(){}[]+=-_/?|*#";
$sc = "";    
for ($p = 0; $p < 12; $p++) {
    $sc .= $ch[mt_rand(0,82)];  // 83 is the strlen of characters
} 

実際には、文字列にスペースを含めることができることがわかりました。これは予想外でした!

なぜでしょうか?アンダースコアをスペースとして扱いますか? ランダムな (そして今まで追跡不可能な) バグを引き起こしてきました。

ありがとう。

4

4 に答える 4

3

推測では (テストされていません)、$ch 文字列を囲む引用符を単一引用符に変更します。ブレースが「評価」されないようにします


編集:

いくつかのテストの後に更新するだけです-「そのまま」変換していないため、コードに問題を引き起こしている何かがあります. スペースなしで100,000回以上実行しました。

問題を除外するために一重引用符で囲みます (評価される他の変数がある場合があります) が、それだけでは問題ではありません。

危険キャラはこちら

于 2012-05-15T10:07:11.687 に答える
1

あなたの機能は良さそうです。考えられるシナリオは、コードの後半で結果の文字列にデコード関数を適用することだと思います。たとえば、urldecode の後の "M0i/%20=3ia5" は "M0i/ =3ia5" のようになります。

于 2012-05-15T10:34:41.157 に答える
1

最終的にhtmlエンティティを生成する可能性があります。たとえば、コードが生成された場合、&nbspまたは文字列にスペースが表示されると想像してください。&#160

于 2012-05-15T10:43:42.673 に答える