2014-09-27 109 views
0

如果我有這樣的字符串:爆炸然後分析字符串分隔符變量

$string = "the year is currently <!--CODE echo date('Y'); CODE-->, it's been a good year." 

凡在上面的字符串<!--CODECODE-->是分隔符,一切都在兩者之間的分隔符是斷章取義和製作成一個字符串。然後將它重新聚合在一起,但刪除了分隔符,並將eval()應用於從分隔符中創建的字符串。

大概我應該使用爆炸和內爆來拆分和加入字符串,但如何定義和分析變量的分隔符,正如我所描述的,我不知道。

如果有人可以幫我解決這個問題,我會非常感謝你。

編輯:也許我應該清楚一件事。上面例子中的$ string是一個包含HTML的數據庫條目,這個HTML被回顯給最終用戶,但在它做之前,我想處理上面提到的HTML註釋的數據庫條目並相應地解析它們中的PHP代碼。我不能簡單地將PHP存儲在數據庫中,因爲它要麼在所有文檔中都可見,要麼在文檔中嵌入HTML註釋。我想解析包含PHP代碼的HTML註釋的數據庫條目,以便我可以分離字符串並在包含PHP代碼的字符串上使用eval()。

+0

使用preg_split分割字符串? – 2014-09-27 08:45:42

+0

@AvinashBabu你會建議我如何使用該功能? – TimD 2014-09-27 08:55:22

回答

1

就像是:

$string = "the year is currently <!--CODE return date('Y'); CODE-->, it's been a good year."; 

$string = preg_replace_callback('/<!--CODE(.*?)CODE-->/', 
    function($groups) { return eval($groups[1]); }, 
    $string); 

echo $string; // displays: "the year is currently 2014, it's been a good year." 

注意,我改變了「回聲」在嵌入代碼「迴歸」。如果你真的需要使用echo,你需要使用輸出緩衝來捕獲它的輸出到字符串中。

+0

非常好,謝謝你。只有1個問題,我必須保持內聯函數嗎? – TimD 2014-09-27 09:28:15

+0

@TimDoyle你不必保持內聯;你可以使用任何類型的[callable](http://www.php.net/manual/en/language.types.callable.php)引用,儘管內聯語法是最簡單的。 – Boann 2014-09-27 09:31:12