2014-09-27 124 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