我目前正在爲PHP編寫PHP代碼混淆器,只是爲了提高我的正則表達式語法。preg替換PHP中的字符串
目標是在任何混淆處理之前base64_encode字符串,並在任何混淆處理之後對其進行解碼。在像「foo bar」或「foo bar」這樣的標準字符串中,一切正常,但它不適用於包含像這樣的轉義(雙/簡單)引號的字符串:'return \'「\'。base64_encode($ matches [0] )\'「\ ';'。如你所見,我試圖混淆我自己的代碼,這似乎很有趣。但我自己的代碼包含特定的正則表達式字符串,這些字符串沒有正確解析。
這裏負責編碼字符串開始,以簡單的行情結束的代碼(分管代碼做同樣的事情用雙引號幾乎是相同的):
$this->output = preg_replace_callback('/(?<!\\\\)\'(.*)(?<!\\\\)\'/isU', create_function(
'$matches',
'return "\'".base64_encode($matches[0])."\'";'
), $this->output
);
任何想法?
爲什麼你不混淆整個字符串?順便說一句,你的模式中的'i'標誌是無用的,因爲模式中沒有任何東西在「其他」情況下具有不同的表示。 – inhan