preg_replace_callback 内にて、if 文で条件分岐をした処理を書きたい
<?php
$content = <<<'EOD'
<pre class="prettyprint linenums">
<?php
if($hoge == 'hoge') {
echo 'hoge!';
}
<span class="nocode">text</span>
</pre>
?>
EOD;
?>
といったソースコードを Wordpress に表示させるとき、ソースコードの部分を htmlspecialchars
で実体参照変換して表示させる。
しかし、ソースコード内に注釈を入れる場合は <span class="nocode"> 注釈 </span>
を利用したい。
<span class="nocode"> 注釈 </span>
に対しては実体参照変換をせずに表示したい。
もしくは、<span class="nocode">
から始まる行は実体参照変換せずに表示したい。
もしくは、$content
を実体参照変換した後に <span class="nocode">
~</span>
の行を htmlspecialchars_decode
する。
現状
preg_replace_callback
で $content
内の文字列を抽出、置換
$content = preg_replace_callback(
'/<pre(.*?)>(.+?)\<\/pre\>/s',
function ($matchese){
return htmlspecialchars($matchese[2], ENT_QUOTES, 'UTF-8');
},
$content
);
$content
を var_dump
すると
string(131) "
<?php
if($hoge == 'hogeho') {
echo 'hoge';
}
<span class="nocode">nocode</span>
?>"
と、中身を実体参照変換することができました。
<span class="nocode"> 注釈 </span>
がソースコード内に入っていない場合はいいのですが、入っている場合のみ、 <span class="nocode"> 注釈 </span>
の部分だけを変換したくありません。
この場合はどのようにしたらいいでしょうか?
ご回答お待ちしております。