PHP:随机ID非法字符

PHP:随机ID非法字符,php,Php,我已经尝试过很多次了,但是我没有得到带有非法字符的ID。但是当下面的代码在我的网站上运行时,它会生成非法字符,比如:XY�DV3VD,L6XÝOMJ3 输出必须由[A-Z]和[0-9]组成。这怎么可能?谢谢你的建议 function uniqeeID($len){ //generate a random id encrypt it and store it in $rnd_id $rnd_id = crypt(uniqid(rand(),1)); //to rem

我已经尝试过很多次了,但是我没有得到带有非法字符的ID。但是当下面的代码在我的网站上运行时,它会生成非法字符,比如:XY�DV3VD,L6XÝOMJ3

输出必须由[A-Z]和[0-9]组成。这怎么可能?谢谢你的建议

function uniqeeID($len){

    //generate a random id encrypt it and store it in $rnd_id 
    $rnd_id = crypt(uniqid(rand(),1)); 

    //to remove any slashes that might have come 
    $rnd_id = strip_tags(stripslashes($rnd_id)); 

    //Removing any . or / and reversing the string 
    $rnd_id = str_replace(".","",$rnd_id); 
    $rnd_id = strrev(str_replace("/","",$rnd_id)); 

    //finally I take the first $len characters from the $rnd_id 
    $rnd_id = strtoupper(substr($rnd_id,0,$len));

    return $rnd_id;

}

从技术上讲,它不会生成非法字符,它只是生成不符合您的字符编码设置的字符

在不做太多研究的情况下绕过这个问题的最简单方法是构造一个包含所有所需字符的字符串,这听起来像是一个开销,但这是一个很好的解决方案

$allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

您可以找到一个出色的解决方案来完成交易。

设置为UTF-8编码将解决您的问题。我还使用了这个脚本,并且没有生成非法字符

为什么要把它藏起来?uniqid已经返回a-z0-9数据…@MarcB实际上,
uniqid
只返回0-9a-f,但你的观点仍然成立;没有理由使用
crypt
。事实上,这并不是必须的。
crypt
使用的是什么算法?您可以使用进行测试。
crypt()
正在输出二进制数据。不打算使用字符串处理函数来处理它。它永远不会包含任何HTML标记,因此
strip\u tags()
是完全多余的。它没有使用
addslashes()
进行转义,因此您不应该对它使用
stripslashes()
。所有这些让它看起来像你不知道你在做什么,但你想让它看起来“安全”。而其他字符串处理调用也同样毫无意义。但正如其他人所说,如果您想要字母数字输出,那么首先为什么要调用
crypt()
?只需单独使用
uniquid()
。Job done
array\u rand()
返回一个索引数组,所以您的函数将只对这些索引进行内爆,从而生成一个只包含数字的字符串。此外,使用
array\u rand()
,任何字符都不能出现一次以上。不,没有理由使用
shuffle()