[PHP-users 8042] Re: \マークの置き換え(自己解決です。)
Mashiki
php-users@php.gr.jp
Tue, 11 Jun 2002 14:19:24 +0900
Mashikiです。
>$sql = ereg_replace("\\\\","", $sql);
>上記のようにして\マークを4つ並べることでできました。
>ですが、どうしてこうなるのか理解できません。
>
>どうして\マークを4つ並べなければいけないのでしょうか?
正規表現で、\は特殊な意味を持つため、文字としての「\」を
指定するために「\」でエスケープする必要があります。
そのため、ereg_replaceの第一パラメータに「\」を2つ指定しなければ
なりませんが、「\」マークはダブルクォート中で特殊な意味を持つため
「\」でそれぞれの「\」をエスケープしなければなりません。
都合、「\」が4つです。
> $sql = ereg_replace("\\\\","", $sql);
この場合でしたら、正規表現は不要なので
$sql = str_replace("\\","", $sql);
も同じです。また、藤井さんのおっしゃるように
$sql = stripslashes($sql);
は、より、やりたいことをストレートに表現する書き方だとおもいます。
また、
>insert into bookmark(title,url,comment,nickname,password) values
>('test','test','test','test','test')
>などのsql文だと
>insert into bookmark(title,url,comment,nickname,password) values
>(\'test\',\'test\',\'test\',\'test\',\'test\')
>となってしまうので置換したいと思いました。
このPHPの挙動が気に入らない場合、php.ini、.htaccess、httpd.confなどを
編集して、
magic_quotes_gpc
参) http://jp2.php.net/manual/ja/configuration.php
の設定を変える。
なんてのも、FAQだったりしてます。
# 余計な心配ですが、フォームから
# 「dalete from bookmark」 や
# 「drop table member」 や
# 「select * from member;drop database xxxx」
# なんてのを間違って投げられないように、色々気を使ってくださいね。