所以我有这个非常简单地模仿handlebars.js的php函数,我已经创建了这个,所以客户可以从wordpress发送个性化的电子邮件。
例如:
您好 {{name}} ,
感谢您与我们联系。
亲切的问候,
{{作者}}
会回来:
您好 John ,
感谢您与我们联系。
亲切的问候,
萨拉
此函数在mail()函数之前运行。我的问题是..当在同一行使用这些标签时,函数会忽略它们
示例:
您好 {{firstname}} {{lastname}} ,
感谢您与我们联系。
亲切的问候,
{{作者}}
会回来:
您好 {{firstname}} {{lastname}} ,
感谢您与我们联系。
亲切的问候,
萨拉
现在我的代码:
$subject = 'Hello {{name}}, this is an exaple';
$replace = array(
'{{name}}' => $name,
'{{email}}' => $email,
'{{phone}}' => $phone
);
$output = preg_replace_callback('/\{\{(.+)\}\}/', function($match) use ($replace) {
if(isset($replace[$match[0]])){
return ($replace[$match[0]]);
} else {
return($match[0]);
}
}, $subject);
答案 0 :(得分:0)
在?
后面添加.+
:
/\{\{(.+?)\}\}/
默认情况下,(贪婪的)正则表达式会抓住所有内容(尽可能多),直到最后一次出现在你的情况下
{{ firstname}} {{lastname }}
因为lastname
之后的两个花括号是当前行中可以匹配的最后一个花括号。
答案 1 :(得分:0)
为什么之前有效:
.
表达式匹配到换行符,除非您使用/s
修饰符;如果没有,你会更快地看到效果,.+
和.*
的贪婪性质。假设在标签内部没有大括号,您可以将内存捕获更改为:
/\{\{([^}]+)\}\}/
^^^^^^^
这意味着"匹配任何不是结束大括号的东西"。