• ベストアンサー

『"』に『\』がついてしまう

PHPで日記帳を作成しています。 元は本のソースを参考にしています。 ほぼうまくいっているのですが、データベース(sqlite)にインサートするルーチンで『"』に『\』がついてしまう現象がおきています。 href="\\××.gif\\ 上のように登録するたびに\が増えていきます。 いまはsqliteを直接操作して消していますので無事動いています。 あやしい箇所↓を削除してみたのですが、直りませんでした。 if (isset($_SERVER['HTTP_REFERER']) and !preg_match('/^' . preg_quote(HTTPS_PATH ? HTTPS_PATH : HTTP_PATH, '/') . '/', $_SERVER['HTTP_REFERER'])) { error('不正なエラーです。'); } 『"』に『\』がついてしまうのはpreg_quoteではないでしょうか? preg_quoteは上記しか使っていませんでした。 ほかにも心あたりありましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.4

UTF-16などを除く主な日本語のエンコーディング形式では、テキストファイル内にASCII文字(半角英数字と一般的な半角の記号)しか無い場合は、ASCII形式のデータのみのデータとなるので、Shift_JIS・UTF-8などの日本語エンコーディングは関係無くなります。ただ、そういった場合に、エディタよってはデフォルトのエンコーディング形式が表示されるようです。 UTF-8で保存したのに開き直すとShift_JISと表示されたのはそのせいかと。 さて、 .htaccess ですが、Webサーバの設定によっては、.htaccess で設定できることが限られます。 例えば、Apacheでしたら AllowOverride 指示子で許可されている項目だけが .htaccess で設定できます。 http://itpro.nikkeibp.co.jp/article/COLUMN/20080512/301299/ お使いのサーバが .htaccess で何が設定できるのか問い合わせられるのがよろしいかと。 もし、.htaccess で magic_quotes の設定が出来ないのであれば、下記のページの例2の様にするしかないかも知れません。 http://jp.php.net/manual/ja/security.magicquotes.disabling.php

Scotty_99
質問者

お礼

回答ありがとうございました。 なるほど。 PHP、.htaccessの奥の深さを改めて痛感しました。 ロリポには確認していませんが、2の方法でokです。 ありがとうございます。 ロリポではchathnallも使えず悪戦苦闘しております。 今後はサクラに移行予定(ビジネスプロ)です。 サーバーの種類によってこちらが武装すべき知識が 変わることを思いっきり痛感しました。 ひとつまた進歩できてなによりです。 今後も勉強して参りたいと思います。 (本業は塾講師なんですが^^;)

その他の回答 (3)

  • kiela7
  • ベストアンサー率50% (1/2)
回答No.3

magic_quotes_gpc が on のままなら stripslashes が使えると思うので、INSERT時にかけてみてはいかがでしょうか。

Scotty_99
質問者

お礼

回答ありがとうございました。 stripslashesを使えば確かに\を削除できますね。 そういう強硬手段も取るべきでしたね。 恐れ入りました。

  • TAI_0824
  • ベストアンサー率54% (6/11)
回答No.2

きっとソースやデータがShift-JISなのですね。php.iniの変更ができる環境でなく、.htaccess が置ける環境でしたら、.htaccessファイル内に「php_flag magic_quotes_gpc off」と書けば大丈夫と思います。

Scotty_99
質問者

お礼

回答ありがとうございました。 おっしゃるとおり実行しました。 ただ、まだ直りません。 .htaccessには php_flag register_globals Off php_flag magic_quotes_gpc Off と書いてありました。 ただ、ほかのソースはutf8なのに.htaccessは shift-jisのままでした。 そこでutf8で保存し直しましたが、再び開くと shift-jisに直っています。 エディタの原因か、.htaccess自身の原因なので 現在いろいろ調査しています。 もしまたなにかわかったら教えてください。

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

magic_quotes が有効になっているのでは? http://jp.php.net/manual/ja/security.magicquotes.what.php php.ini の設定を変えれば magic_quotes を無効にすることが出来ます。 http://jp.php.net/manual/ja/security.magicquotes.disabling.php

Scotty_99
質問者

お礼

回答ありがとうございました。 おっしゃるとおりのようです。 php.iniはアクセスできないので、 .htaccessを直接編集しています。 php_flag register_globals Off php_flag magic_quotes_gpc Off と書いてありましたが、 保存すると、 <img src=\\\"http://toratora.lolipop.jp/files/DSC0005.JPG\\\" alt=\\\"DSC0005.JPG\\\" width=\\\"250\\\" height=\\\"333\\\" /> となってしまいます。 おそらく.htaccessがshift-jisだからのような 気がします。 utf8に保存し直しても、頑固なことにshift.jisに 戻ってしまいます。

関連するQ&A