
いつもお世話になっております。
PHP初心者です。
シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い、以下のように記述しました。
--------------------------------------------------
$naiyo = $_POST['naiyo'];
$search = array('\'','"');
$replace = array('\'\'','\"');
$naiyo2 = str_replace($search,$replace,$naiyo);
--------------------------------------------------
シングルクォーテーションは置換された(文字列として表示された)のですが、ダブルクォーテーションは表示されず、ダブルクォーテーション以下の文字列が消えてしまいます。
置換ができていないというよりも、そもそもダブルクォーテーションが検索に引っかかってもいないようです。
どのようにすればダブルクォーテーションも置換できるか、お分かりの方がいらっしゃいましたらご教示ください。
よろしくお願いいたします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
連投すいません。
今現在手もとの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.3
- 回答日時:
PHPのmagic_quotes_gpc
の設定によってかわってくるんじゃないですか?
magic_quotes_gpcがOnだとデフォルトでGET POST COOKIEの値が
バックスラッシュでエスケープされます。
仮にOffにした場合
naiyo=おおお'ee"
という値をGETで取得したとき
$search = array('\'','\"');
$replace = array('\'','\"');
の条件ならきちんと変換されました。
No.2
- 回答日時:
「何のために」置換するのでしょうか?用途によって(何のために行うのかによって)手法は異なってきます。
>シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い
普通は「そのまま」で問題ないハズですが・・・。
たとえばスクリプト間を持ち回るためにinput要素(type="hidden")のvalue属性に与えたいのであれば、htmlspecialcharsしてから与えるべきです(単引用符と二重引用符をどうにかすればいいという話ではありません)。
また、この(単引用符や二重引用符を含んだ)文字列データをデータベースに挿入するのであれば、
・mysql_real_escape_stringを使う(非推奨のネイティブなMySQL関数)
・プリペアドステートメントを使う(PDOやMDB2など)
になるハズです。
No.1
- 回答日時:
変換後の文字列 $naiyo2 をどのようにして出力していますか?
書かれているプログラムを実行してみたら、シングルコーテーションはシングルコーテーション2個に、ダブルコーテーションは円マークとダブルコーテーションに変換されていましたよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- ホテル・旅館 ホテルの厚意でのアップグレードの場合 5 2023/06/10 13:18
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) Excel vba で1と10を正確に判断させる方法を教えてください。 TからU列に1と入力があれば 3 2022/12/26 16:54
- その他(IT・Webサービス) 少し複雑なテキスト置換がしたいです。 2 2022/10/13 14:42
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
配列の値の更新方法について
-
PHPの構文で間違えが分からない
-
SFTPなどは使わないホームペー...
-
$_SESSIONに渡した後はそのまま...
-
($_POST['email']??"", ・・・...
-
phpのエラーについて
-
PHP MySql 画像を取得
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
PHP8でWarning:Undefined varia...
-
marginの値でマイナス値を設定...
-
phpでcookieがうまく保存されない
-
SplFileObject を利用したとき...
-
PHPSpreadsheetを使って関数を...
-
PHPSpreadsheetによる書き出し...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
PostgreSQLからCSV形式でエクス...
-
PHPを使って、別サイトの一部を...
-
BASIC認証のフォームをデザイン...
-
入力した部分を表示させたまま...
-
【初心者】XAMPPのapacheの(恐...
-
ログイン機の付きの掲示板サイ...
-
ワードプレスサイト PHP8.0.25...
-
Postgresの特定のカラムからス...
-
PHPで画像の渡しが上手く行きま...
-
PHPの勉強してます。 配列のと...
おすすめ情報