5

誰かがこのエラーのデバッグを手伝ってもらえますか?

警告: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の問題ですか、それとも何か他のものですか?アプリケーションはローカルマシンでは正常に動作しますが、サーバーでは動作しません。

4

1 に答える 1

10

*(正規表現では、キャプチャグループを開始するときに、前の文字を0回以上一致させることを意味します。したがって、の*前にあるのは、それ自体では繰り返すことができないため、繰り返すことは*(もありません。したがって、この警告です。

*それを修正するには、次のように、をエスケープします。

$uid = preg_replace("#(\*UTF8)[^A-Za-z0-9]#", "", $tmp);
于 2012-09-04T15:11:30.103 に答える