有人能帮助调试这个错误吗?
警告:preg_replace()[function.preg replace]:编译失败:偏移1 无需重复
//Generate uid
function gen_uid($len=40) {
$hex = md5("what" . uniqid("", true));
$pack = pack('H*', $hex);
$tmp = base64_encode($pack);
$uid = preg_replace("#(*UTF8)[^A-Za-z0-9]#", "", $tmp);
$len = max(4, min(128, $len));
while (strlen($uid) < $len)
$uid .= gen_uid(22);
return substr($uid, 0, $len);
}
是什么原因造成的?这是PHP问题还是其他问题?该应用程序在我的本地计算机上运行良好,但在服务器上运行不好。
正则表达式中的*
表示与前一个字符匹配0次或更多次,而(
则启动一个捕获组。因此,*
没有什么可重复的,因为*
之前的是(
,它本身无法重复,因此发出此警告。
要修复它,只需退出*
,如下所示:
$uid = preg_replace("#('*UTF8)[^A-Za-z0-9]#", "", $tmp);