如何在执行PHP" preg_replace"时在base64中动态编码

时间:2015-04-04 04:35:45

标签: javascript php regex base64 file-get-contents

我正在使用正则表达式解析js文件服务器端,以便在实际将代码发送到客户端之前找到我必须更改的模板的所有元素。事情适用于文件但不适用于图像。

关键思想是在base64中对它们进行经典编码,并使用atob()进行解码。我不知道PHP是否能够在执行正则表达式(?)

时在base64中编码图像

如果是,那可以解释我没有得到任何结果。如果没有,如果有人花一点时间帮助我理解下面说明的问题,那就太好了。

解析器(PHP):

$content = file_get_contents('myfile.js');
$pattern = '/__image\[(.*)\]__/i';
$url = '$1';
$complete = preg_replace($pattern, base64_encode(file_get_contents($url)), $content);
echo json_encode($complete);

客户端控制器(JS):

... //result of an ajax call
content = JSON.parse(responseText);
eval(content); //data are safe

包含对图片(JS)的调用的文件:

    config.design = { 
            logo : { 
                    ...
            },  
            image : { 
                    ...
                    background : background : 'url(data:image/jpg;base64,__image[css/images/logo/logo.jpg]__)'
            },  
            baseline : { 
                    ...
            }   
    }; 

结果:

background-image: url(data:image/jpg;base64,); //[Error] Failed to load resource ... (kCFErrorDomainCFNetwork erreur -10). (data:image/jpg;base64,false, line 0)

1 个答案:

答案 0 :(得分:0)

以下是sample code preg_replace_callback,其中显示了如何修改子匹配。

$str = "background : background : 'url(data:image/jpg;base64,__image[css/images/logo/logo.jpg]__)'\nbackground : background : 'url(data:image/jpg;base64,__image[css/images/logo/logo.jpg]__)'"; 
$re = "/([^<>]*?__image\[)(.*?)(\]__\)')/i"; 
$str = preg_replace_callback($re, function ($matches) {
        return str_replace($matches[1], "background-image: url(", 
               str_replace($matches[3], ");",
               str_replace($matches[2], "<<base64-file>>", $matches[0])));
          }, $str);
print ($str);

输出:

background-image: url(<<base64-file>>);background-image: url(<<base64-file>>);