在我定制的cms中,我需要替换从数据库表中选择的部分文本,其中包含:
Lorem ipsum dolor sit amet, 奉献精神 {Block}'myfunc',数组(11, 'thumbnail','large',18){/ Block} sed 做eiusmod tempor incididunt ut labore et dolore magna aliqua
带有{Block}的文本的一部分,应该用将执行函数myfunc的php函数替换,并传递包含所提到的数组的参数。
对我来说,最大的问题是我不知道我将在文本中有多少{Block}以及它们将被放置在哪里。我知道我可以简单地“爆炸”文字,做一些体操,但我不知道这是不是最好的方法。
我知道这不简单...如果你可以帮助我,请。
提前谢谢你!
答案 0 :(得分:1)
你可以试试这个
str_replace函数( '{}块', '< PHP');
str_replace函数( '{/块}', '>?');
答案 1 :(得分:1)
我知道,当我想用正则表达式做所有事情时,每个人都讨厌我,但我喜欢它:)
$text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit {Block}'myfunc', array(11,'thumbnail','large',18){/Block} sed do eiusmod tempor incididunt ut labore et dolore magna {Block}'myfunc', array(453,'thumbnai23l','small',6458){/Block} aliqua";
function myfunc($data) {
return '<'.$data[0].'-'.$data[1].'-'.$data[2].'-'.$data[3].'>';
}
preg_match_all("/{Block}'([^,]*)', array\(([^\)]*)\){\/Block}/i", $text, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$text = str_replace($match[0],$match[1](explode(",", $match[2])), $text);
}
echo $text;
只是,请确保使用相同的分隔符分隔数组值,在我的情况下只是逗号,在您的情况下,它是逗号+空格。调整你喜欢的任何东西。
这样的东西,可以轻松利用,所以,一定要检查$ match [1]是否在你允许的函数列表中;)