[PHP-users 32656] e 修飾子のジレンマ

yamada_coffee @ yahoo.co.jp yamada_coffee @ yahoo.co.jp
2007年 9月 27日 (木) 21:06:06 JST


山田と申します。
preg_replace()でe修飾子を用いて文字列置換をしようとしたところ、
困った問題に突き当たりました。

preg_replace()でe修飾子を用いたときに、後方参照を「'」で囲むと、
後方参照の中の「"」や「\」がエスケープされた状態で表れてしまいます。

<?php
// Sample 1

$string = '<code>&lt;?php $string = "hoge"; ?&gt;</code>';
$string = preg_replace('#<code>&lt;\?php (.*?) \?&gt;</code>#e',
"highlight_string('<?php $1 ?>', TRUE)", $string);

echo $string;
?>

かといって後方参照を「"」で囲むと、今度は「$」で始まる部分を変数としてパ
ースしてしまいます。

<?php
// Sample 2

$string = '<code>&lt;?php $string = "hoge"; ?&gt;</code>';
$string = preg_replace('#<code>&lt;\?php (.*?) \?&gt;</code>#e',
'highlight_string("<?php $1 ?>", TRUE)', $string);

echo $string;
?>

このようなジレンマを解消するにはどうすればいいのでしょうか。

--------------------------------------
Easy + Joy + Powerful = Yahoo! Bookmarks x Toolbar
http://pr.mail.yahoo.co.jp/toolbar/



PHP-users メーリングリストの案内