如何在执行 PHP "preg_replace" 时在 base64 中动态编码
How to dynamically encode in base64 while doing a PHP "preg_replace"
我正在使用正则表达式解析 js 文件服务器端,以便在实际将代码发送到客户端之前找到我必须更改的所有模板元素。文件工作正常,但图像不工作。
关键思想是用 base64 对它们进行经典编码,然后使用 atob()
进行解码。我不知道 PHP 是否能够在执行正则表达式时以 base64 编码图像 (?)
如果是,那可以解释我没有得到结果。如果没有,如果有人能花一点时间帮助我理解下面说明的问题,那就太好了。
解析器 (PHP) :
$content = file_get_contents('myfile.js');
$pattern = '/__image\[(.*)\]__/i';
$url = '';
$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)
这里 sample code with 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>>);
我正在使用正则表达式解析 js 文件服务器端,以便在实际将代码发送到客户端之前找到我必须更改的所有模板元素。文件工作正常,但图像不工作。
关键思想是用 base64 对它们进行经典编码,然后使用 atob()
进行解码。我不知道 PHP 是否能够在执行正则表达式时以 base64 编码图像 (?)
如果是,那可以解释我没有得到结果。如果没有,如果有人能花一点时间帮助我理解下面说明的问题,那就太好了。
解析器 (PHP) :
$content = file_get_contents('myfile.js');
$pattern = '/__image\[(.*)\]__/i';
$url = '';
$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)
这里 sample code with 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>>);