我发现 php preg_replace 不适用于 HTML 标签。
假设我有这样的代码:
$language = $this->cms_language();
$pattern = array();
$pattern[] = "/\{\{ if_language:$language \}\}(.*)\{\{ elif_language:.*\{\{ end_if }}/";
$pattern[] = "/\{\{ if_language:$language \}\}(.*)\{\{ else \}\}.*\{\{ end_if }}/";
$pattern[] = "/\{\{ if_language:.*\{\{ elif_language:$language \}\}(.*)\{\{ elif_language:.*\{\{ end_if }}/";
$pattern[] = "/\{\{ if_language:.*\{\{ elif_language:$language \}\}(.*)\{\{ else \}\}.*\{\{ end_if }}/";
$pattern[] = "/\{\{ if_language:.*\{\{ else \}\}(.*)\{\{ end_if }}/";
$replacement = '$1';
$value = preg_replace($pattern, $replacement, $value);
$this->cms_language() 将返回 "english"、"german" 或 "indonesia" 之一
当我将这样的字符串分配给 $value 时,它将给出“Victoria”、“Hitler”或“Sule”,具体取决于 $language 的值:
$value = '{{ if_language:english }}Victoria{{ elif_language:german }}Hitler{{ else }}Sule{{ end_if }}</p>'
但是当我将 $value 更改为
$value = '{{ if_language:english }}<br />
Victoria<br />
{{ elif_language:german }}<br />
Hitler<br />
{{ else }}<br />
Sule<br />
{{ end_if }}</p>'
会将 $value 本身作为输出。
那么这里有什么问题呢?
编辑:对不起,我发现这个有效:
$value = '{{ if_language:english }}<br />Victoria<br />{{ elif_language:german }}<br /> Hitler<br />{{ else }}<br />Sule<br />{{ end_if }}';
所以我想问题出在换行符上,而不是 <br /> 标签