我从头开始使用自己的cms,所以,我正在为我的系统添加有用的功能,但我对此感到困惑:
正在从数组上的lang文件加载一个短语,在本例中为$lang['sign']['server'] = 'Sign in with your {{servername}} registered account:';
,然后,通过函数,{{servername}}
必须替换为$config['servername']
。
到目前为止,我在函数类中的内容如下:
public function replaceTags($text)
{
global $config;
return preg_replace("/{{(.*?)}}/" , $config[strtolower("$1")], $text) ;
}
我在此处调用此功能:$main->set('ssocial', $FUNC->replaceTags($lang['sign']['social']));
,但结果为Sign in with your registered account:
而不是Sign in with your "Server Name Goes Here" registered account
。
关于为什么preg_replace没有检索值的任何想法?
此外,如果$config[”$1”]
位于''这样'$config[”$1”]'
之内,则输出为Sign in with your $config[”servername”] registered account:
,因此我没有关于错误的线索。
提前致谢。
答案 0 :(得分:0)
使用preg_replace_callback
这是一个快速而又脏的工作示例<?php
$config = array('server' => 'my custom text');
function handler($matches){
global $config;
return $config[$matches[1]];
}
function replaceTags($text)
{
return preg_replace_callback("/{{(.*?)}}/" , 'handler', $text) ;
}
print replaceTags("Hello {{server}}");
输出:
Hello my custom text
至于为什么你的代码不起作用:preg_replace的第二个参数是$ config [strtolower(“$ 1”)],所以php会在"$1"
中逐字寻找密钥$config
,可能不存在。