2012-09-04 44 views
3

有人可以帮助调试此错误吗?警告:preg_replace()[function.preg-replace]:编译失败:没有重复的偏移量1

警告:preg_replace函数()[function.preg替换]:编译失败: 没有偏移量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

,这将出现在本地计算机上的“正常工作”其实是惊人的。请在您的本地计算机中启用警告,并调查为什么它似乎有效,因为它应该因答案中提到的原因而失败。 – eis

+0

@eis,我的本地坚持显示没有警告或错误。 –

+0

,你应该启用它们,所以它会... – eis

回答

6

*正则表示匹配前一个字符0次或多次,而(开始捕获组。所以,*没有什么可重复的,因为在*之前是(,它不能被自己重复,因此这个警告。

为了解决这个问题,只是逃避*,像这样:

$uid = preg_replace("#(\*UTF8)[^A-Za-z0-9]#", "", $tmp); 
+0

也'''会导致同样的错误 –

相关问题