• 締切
  • 困ってます

ダブルクォーテーションが置換できません

  • 質問No.7666387
  • 閲覧数2949
  • ありがとう数0
  • 回答数5

お礼率 77% (62/80)

いつもお世話になっております。
PHP初心者です。

シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い、以下のように記述しました。
--------------------------------------------------
$naiyo = $_POST['naiyo'];

$search = array('\'','"');
$replace = array('\'\'','\"');
$naiyo2 = str_replace($search,$replace,$naiyo);
--------------------------------------------------

シングルクォーテーションは置換された(文字列として表示された)のですが、ダブルクォーテーションは表示されず、ダブルクォーテーション以下の文字列が消えてしまいます。
置換ができていないというよりも、そもそもダブルクォーテーションが検索に引っかかってもいないようです。

どのようにすればダブルクォーテーションも置換できるか、お分かりの方がいらっしゃいましたらご教示ください。
よろしくお願いいたします。

回答 (全5件)

  • 回答No.5

ベストアンサー率 66% (2/3)

連投すいません。
今現在手もとのPHPが5.4系なので状況を確認できないのですが
GET POST等されたとき古いPHPだとでデフォルトでシングルクオーテーション・ダブルクオートがバックスラッシュでエスケープされます。
この
magic_quote_gpcをOFFにするのが一番いいのですが、それができない場合

まず、バックスラッシュでエスケープされるということは
$naiyo = "いいい\\'えええ\\\"";
上記の様な形ででHTTPリクエストが帰ってきます。
ということは、置換系の関数で\\をとってやればいいということになります。
たとえば以下のような感じ?
$search = array('\\','\\');
$replace = array('','');

$naiyo2 = str_replace($search,$replace,$naiyo);
print $naiyo2;

かななあ・・・。ごめんなさい、掲題の環境がないから憶測だけど。
できなかったらすんません。
  • 回答No.4

ベストアンサー率 66% (2/3)

no3です。ごめんなさい。アホな回答しました。No3の回答は忘れてください。
  • 回答No.3

ベストアンサー率 66% (2/3)

PHPのmagic_quotes_gpc
の設定によってかわってくるんじゃないですか?
magic_quotes_gpcがOnだとデフォルトでGET POST COOKIEの値が
バックスラッシュでエスケープされます。

仮にOffにした場合
naiyo=おおお'ee"
という値をGETで取得したとき
$search = array('\'','\"');
$replace = array('\'','\"');
の条件ならきちんと変換されました。
  • 回答No.2

ベストアンサー率 54% (865/1590)

「何のために」置換するのでしょうか?用途によって(何のために行うのかによって)手法は異なってきます。

>シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い

普通は「そのまま」で問題ないハズですが・・・。

たとえばスクリプト間を持ち回るためにinput要素(type="hidden")のvalue属性に与えたいのであれば、htmlspecialcharsしてから与えるべきです(単引用符と二重引用符をどうにかすればいいという話ではありません)。

また、この(単引用符や二重引用符を含んだ)文字列データをデータベースに挿入するのであれば、

・mysql_real_escape_stringを使う(非推奨のネイティブなMySQL関数)
・プリペアドステートメントを使う(PDOやMDB2など)

になるハズです。
  • 回答No.1

ベストアンサー率 38% (3337/8723)

他カテゴリのカテゴリマスター
変換後の文字列 $naiyo2 をどのようにして出力していますか?
書かれているプログラムを実行してみたら、シングルコーテーションはシングルコーテーション2個に、ダブルコーテーションは円マークとダブルコーテーションに変換されていましたよ。
関連するQ&A

ピックアップ

ページ先頭へ