Converting preg_replace to preg_replace_callback for finding and replacing words with variables(将PREG_REPLACE转换为PREG_REPLACE_CALLBACK以查找和替换带有变量的单词)
本文介绍了将PREG_REPLACE转换为PREG_REPLACE_CALLBACK以查找和替换带有变量的单词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下一行代码:
$message = preg_replace('/{{([a-zA-Z_-]+)}}/e', "$$1", $body);
这将用同名变量替换由两个大括号括起来的单词。即{{userName}}被$userName替换。
我正在尝试将其转换为使用PREG_REPLACE_CALLBACK。这是我到目前为止基于Google的代码,但是我真的不确定我在做什么!ERROR_LOG输出显示变量名,包括大括号。
$message = preg_replace_callback(
"/{{([a-zA-Z_-]+)}}/",
function($match){
error_log($match[0]);
return $$match[0];
},
$body
);
非常感谢您的任何帮助。
推荐答案
函数在PHP中有它们自己的变量作用域,因此您试图替换的任何内容在函数中都不可用,除非您显式地这样做。我建议将您的替换放在一个数组中,而不是单个变量中。这有两个优点--第一,它允许您轻松地将它们放在函数范围内;第二,它提供了内置的白名单机制,这样您的模板就不会意外(或故意)引用不应该公开的变量。
// Don't do this:
$foo = 'FOO';
$bar = 'BAR';
// Instead do this:
$replacements = [
'foo' => 'FOO',
'bar' => 'BAR',
];
// Now, only things inside the $replacements array can be replaced.
$template = 'this {{foo}} is a {{bar}} and here is {{baz}}';
$message = preg_replace_callback(
'/{{([a-zA-Z_-]+)}}/',
function($match) use ($replacements) {
return $replacements[$match[1]] ?? '__ERROR__';
},
$template
);
echo "$message
";
这将产生:
this FOO is a BAR and here is __ERROR__
这篇关于将PREG_REPLACE转换为PREG_REPLACE_CALLBACK以查找和替换带有变量的单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:将PREG_REPLACE转换为PREG_REPLACE_CALLBACK以查找和替换带有变量的单词
基础教程推荐
猜你喜欢
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01