使用preg_replace创建自己的标签

时间:2014-11-14 10:19:19

标签: php preg-replace

我尝试使用将自己的标记添加到网站内容中,以便用户可以添加指定的标记,并替换相关内容。 例如[company_address]

我正在使用preg_replace($ patterns,$ replacementments,$ content);

但它用乱码文本填充页面。

function search4Tags($content){

    $patterns = array();
    $patterns[0] = '/[company_name]/';
    $patterns[1] = '/[company_logo]/';
    $patterns[2] = '/[company_address]/';

    $replacements = array();
    $replacements[0] = $_SESSION['company_name'];
    $replacements[1] = $_SESSION['company_logo'];
    $replacements[2] = $_SESSION['company_address'];

    return preg_replace($patterns, $replacements, $content);
}

2 个答案:

答案 0 :(得分:1)

正如上面的评论所述,您不需要preg_replacestr_replace()将完成您需要的一切以及更多。并且恰好少了一行。

E.G。

    $this->body = str_replace('[company_name]', '$_SESSION[company_name]', $this->body);

答案 1 :(得分:1)

问题是方括号。它们定义了一个字符组:里面的任何字符都匹配。

例如,/[company_name]/匹配任何字符acemnopy_,因此将替换它们的任何出现。

来自str_replace() docs:

  

如果您不需要花哨的替换规则(如正则表达式),则应始终使用此函数而不是preg_replace()

由于您只是替换常量字符串,我建议改为str_replace()。这假设搜索模式是简单的字符串。

只需将preg_replace()替换为str_replace(),然后删除正则表达式斜杠。

$patterns = array();
$patterns[0] = '[company_name]';
$patterns[1] = '[company_logo]';
$patterns[2] = '[company_address]';
// identical code omitted 
return str_replace($patterns, $replacements, $content);

如果您真的,确实需要使用preg_replace(),请使用\' s转义括号。

$patterns = array();
$patterns[0] = '/\\[company_name\\]/'; 
$patterns[1] = '/\\[company_logo\\]/'; 
$patterns[2] = '/\\[company_address\\]/';
// identical code omitted