我尝试使用将自己的标记添加到网站内容中,以便用户可以添加指定的标记,并替换相关内容。 例如[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);
}
答案 0 :(得分:1)
正如上面的评论所述,您不需要preg_replace
。 str_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