2013-01-23 98 views
0

我目前正在爲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 
    ); 

任何想法?

+0

爲什麼你不混淆整個字符串?順便說一句,你的模式中的'i'標誌是無用的,因爲模式中沒有任何東西在「其他」情況下具有不同的表示。 – inhan

回答

1

請儘量減少您的問題(發佈不工作的代碼儘可能簡單)。

$test = "bla blah 'match \' this' blah blah"; 
$test = preg_match('/(?<!\\\\)\'(.*)(?<!\\\\)\'/isU', $test, $matches); 
var_dump($matches); 

作爲魅力。

+0

我最大限度地減少了我的問題,儘可能多我嘗試了你的代碼(謝謝你的答案),但它不適用於字符串中間的雙引號。 這幾乎是我想做的事情,無論分隔符的類型如何,都編碼一個字符串,而不管內容。 –