[PHP-users 26916] 文字列エスケープ関数について

tommy tommy @ asobicreate.com
2005年 9月 17日 (土) 13:41:15 JST


富沢です。

素朴な疑問なのですが、QuoteMeta関数とpreg_quote関数、似て微妙に異なる
関数ですが、なぜこんな事になっているのか、そして具体的な使い分けに関して
お聞きしたく思いました。

$string = ".\\+*?[^]($)-|+/";
print "preg_quote=".preg_quote($string)."\n";
print "quotemeta=".quotemeta($string)."\n";

こんなコードを実行すると

preg_quote=\.\\\+\*\?\[\^\]\(\$\)-\|\+/
quotemeta=\.\\\+\*\?\[\^\]\(\$\)-|\+/

"|"をエスケープするかしないかに差異があるようです。でもこれを正規表現を
作る際に使おうとすると、"-"と"/"がエスケープされないので、改めて置換関数
などを用いないといけません。なぜ?と疑問を持ちました。

同じように、addslashesとmysql_escape_string,pg_escape_stringなどの関係も
気になるところです。

トリビア的なネタでも良いのですが、参考になるヒントはないでしょうか。些末な
問題ですけど、とても気になったので。





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