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 回答
1

为什么不直接使用:

    $length = 12;
    $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
    echo $randomString;
于 2013-07-03T09:01:02.467 回答