Wordpress で コードのシンタックスハイライトをするときに
html
1<pre class="prettyprint linenums"> 2<?php echo 'hoge'; ?> 3</pre>
と、そのままコードで書くとエスケープされてしまいますので
<pre class="prettyprint linenums">
と </pre>
の間だけ php の正規表現を利用して特殊文字を実体参照に変換するプラグインを作成したい。
プラグインを通すことで記事のソースが
html
1<pre class="prettyprint linenums"> 2<?php echo 'hoge'; ?> 3</pre>
と、なれば自分が意図した挙動になります。
- まずは 正規表現の
preg_replace_callback
で<pre class="prettyprint linenums">
と</pre>
という文字列を判定
php
1$content = preg_replace_callback('/<pre(.*?)>(.+?)\<\/pre\>/s', 'self::_pre', $content); 2 3// result 4Array 5( 6 [0] => <pre class="prettyprint linenums"><?php echo 'hoge'; ?></pre> 7 [1] => class="prettyprint linenums" 8 [2] => <?php echo 'hoge'; ?> 9)
<?php echo 'hoge'; ?>
という 文字列($result[2]
)をhtmlspecialchars
で実体参照し、 $content に代入する
php
1$content = htmlspecialchars($result[2], ENT_QUOTES, 'UTF-8');
と、記述してプラグインを作成し有効化してみたのですが
<pre class="prettyprint linenums">
と </pre>
の html が吐出されずに、$content
の部分だけが実体参照されてでてきます。
html
1<pre class="prettyprint linenums"> 2<?php echo 'hoge'; ?> 3</pre>
↑こう記述した記事が
html
1<?php echo 'hoge'; ?>
という html で吐き出されます。
<pre class="prettyprint linenums">
と </pre>
が、記事ソースから消えています。
どこで実装を間違っていますか?
ご回答おまちしております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。