2015-04-04 22 views
1

我正在使用正則表達式解析js文件服務器端,以便在實際將代碼發送到客戶端之前查找模板的所有元素。對於文件,事情可以正常工作,但不適用於圖像如何在執行PHP時使用base64進行動態編碼「preg_replace」

關鍵的想法是在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):

:其中包含該呼叫到圖象(JS)

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

文件

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

我想你想可能是什麼['preg_replace_callback'(https://php.net/manual/en/function.preg-replace-callback.php) 。 – Passerby 2015-04-04 04:41:34

+0

不知道那個功能,我現在檢查一下 – 2015-04-04 04:43:22

回答

0

這裏是一個sample codepreg_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>>); 
相關問題