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> の部分だけを変換したくありません。
この場合はどのようにしたらいいでしょうか?
ご回答お待ちしております。