[PHP-users 7598] preg_replace の動作について
php-users@php.gr.jp
php-users@php.gr.jp
Mon, 20 May 2002 15:37:47 +0900
こんにちは。福田と申します。
preg_replaceの仕様について、ご存知の方がいらっしゃいましたら、
教えていただけないでしょうか?
下記のようなソースを実行すると...
------------------------------------------------------------
<?php
function nonaction($val){
return $val;
}
$str= sprintf("%s %s\n",
'"TEST"', "'TEST'");
print $str;
print preg_replace('/^(.*)$/', "$1", $str);
print preg_replace('/^(.*)$/e', "nonaction('$1')", $str);
print preg_replace('/^(.*)$/e', 'nonaction("$1")', $str);
?>
------------------------------------------------------------
下記のような結果が返ってきます。
------------------------------------------------------------
"TEST" 'TEST'
"TEST" 'TEST'
\"TEST\" 'TEST'
"TEST" \'TEST\'
------------------------------------------------------------
3番目,4番目のように「/e」修飾子をつけた場合、replacementに書いた
PHPコードの「'"」の書き方によって参照内容の「'"」に「\」が付加されて
しまいます。
これが、仕様であれば そう思ってプログラムを書くまでなのですが、
どうなんでしょうか?
「設定で変更可能」、「使い方が悪い」、「バグです」などなど
どなたかご存知の方がいらっしゃいましたら、教えてください。
ちなみに、動作環境ですが、
php-4.1.2
-> RedHat6.1J
php-4.2.0 + 国際化パッチ(藤本さん)
-> RedHat7.2J
で、確認しました。
php.iniは、php.ini-recommended をベースにしています。
magic_quotes_gpcなど、関係のありそうな箇所はoffになってると思います。
よろしくお願いします。
--
Masahiro Fukuda mailto:masahif@ynot.co.jp