preg_replace无法检索正确的数据

时间:2014-09-02 15:51:14

标签: php

我从头开始使用自己的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:,因此我没有关于错误的线索。

提前致谢。

1 个答案:

答案 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,可能不存在。