以下是我替换{{ }}
之间内容的代码。例如,我使用{{example}}从db加载自定义文本以替换html输出中的内容。这很好但有时它没有,我不确定为什么。如果我使用两个{{one}}和{{two}},它可能在同一行。所以我想也许我在做preg_replace
错了。
function translate($tagname){
global $$tagname;
return $$tagname;
}
function replaceTags($body){
$body = preg_replace('!{{(.*?)}}!Uei', "''.translate('$1').''", $body);
return $body;
}
答案 0 :(得分:3)
你应该删除U
修饰符,因为它会使你的不合理(.*?)
变得贪婪,而这不是你想要的。
此外,在PHP 5.5.0中不推荐使用e
修饰符。请改用preg_replace_callback:
$firstName = 'Jane';
$lastName = 'Doe';
function translate($tagname){
global $$tagname;
return $$tagname;
}
function translateMatch($matches) {
return translate($matches[1]);
}
function replaceTags($body){
$body = preg_replace_callback('!{{(.*?)}}!i', 'translateMatch', $body);
return $body;
}
echo replaceTags("Hello, {{firstName}} {{lastName}}!"), PHP_EOL;
输出:
Hello, Jane Doe!