2013-01-23 104 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

我最大限度地减少了我的问题,尽可能多我尝试了你的代码(谢谢你的答案),但它不适用于字符串中间的双引号。 这几乎是我想做的事情,无论分隔符的类型如何,都编码一个字符串,而不管内容。 –