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() は、「英語」、「ドイツ語」、または「インドネシア」のいずれかを返します
このような文字列を $value に割り当てると、$language の値に応じて、"Victoria"、"Hitler"、または "Sule" のいずれかが返されます。
$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 /> タグではなく、改行文字にあると思います