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

KISE Hiroshi kise @ fuyuneko.jp
2005年 9月 17日 (土) 14:40:26 JST


マニュアルをひいただけで、あとは想像です。

From: "tommy" <tommy @ asobicreate.com>
Subject: [PHP-users 26916] 文字列エスケープ関数について
Date: Sat, 17 Sep 2005 13:41:15 +0900
> 素朴な疑問なのですが、QuoteMeta関数とpreg_quote関数、似て微妙に異なる
> 関数ですが、なぜこんな事になっているのか、そして具体的な使い分けに関して
> お聞きしたく思いました。

http://php.net/quotemeta
http://php.net/preg_quote

“preg_”で始まる名前の関数は「Perl互換の正規表現関数」ですから、
エスケープされる文字の種類も異なるのではないでしょうか。

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

“/”は正規表現の中では普通の文字ですよね。エスケープしなくても
よいのでは。“-”は“[”と“]”の間になければ普通の文字ですし。

“/”に関しては、preg_quote()の2番目の引き数でデリミタとして
指定してやることができるそうです。

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

調べていませんけど、同様に、特別な意味を持つ文字の種類によるのでは
ないでしょうか。addslashesあたりはPEAR DBでプレースホルダを使って
区別せずにいきたいところでもありますが。
-- 
喜瀬“冬猫”浩


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