• ベストアンサー

引用符(シングルとダブルクオーテーション)について

http://jp.php.net/manual/ja/language.types.string.php を参考にしていますが、 たとえば $parameter="jiro";で定義されているときに echo"$parameter";とecho'$parameter';では結果が違うのでしょうか?それとも同じでしょうか? シングルとwのクオーテーションの違いはこの他には 上のURLにあるように対応しているエスケープ文字がちがう言う理解でいいんでしょうか?

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Wクオーテーションで囲まれた変数は、その変数の中身に展開されます シングルクオーテーションの場合は、ドル記号を含んだ文字のままです。 つまり echo "$parameter"; >jiro echo '$parameter'; >$parameter のような表示なります。

SariGEnNu
質問者

お礼

ありがとうございます. やっぱりそういう風に使い分けなければいけなかったんですね.

関連するQ&A

  • SQLインジェクション対策(クオーテーション関連

    PHP Version 5.4.7の環境にて。 SQLite3::escapeStringを使って、 SQLインジェクション対策をしようと考えています。 HTMLの<form>からPOSTで値を受け取り、 その値をSQL文に入れ込み、 そのクエリ(※ちなみに、INSERTのみです。)をSQLite3のDBに対して行う、 なんてことをする際の、 SQLインジェクション対策として、お考え下さい。 POSTで受け取る値に入っていたら危険なものとして、 「シングルクオーテーション」が、まず、挙げられるかと思います。 「'」 ←これです。 さて、「"」 ←こちらはダブルクオーテーションですが、 こちらのダブルの方はエスケープする必要は無いのでしょうか? (例)※wikipediaより SELECT * FROM users WHERE name = '(入力値)'; SELECT * FROM users WHERE name = 't' OR 't' = 't'; → このSQL文では条件が常に真となるため、 nameカラムの値にかかわらず、全レコードが選択される。 → ということで、入力値に、 エスケープされていない「シングルクオーテーション」をそのまま使うのはNG。 ここまではOKです。 では、次に、ダブルクオーテーション版で、 SELECT * FROM users WHERE name = "(入力値)"; SELECT * FROM users WHERE name = "t" OR "t" = "t"; こちらはどうなのでしょうか? (シングルをダブルに変えただけですが。) ---------- ちなみに、 SQLite3::escapeString にて、 (1) $var = "Let's"; //←シングルクオーテーション $db = new SQLite3(':memory:'); $escaped_var = $db->escapeString($var); echo $escaped_var; //Let''s と表示される (「 ' 」が1つ追加される。) (2) $var = 'Let"s'; //←ダブルクオーテーション $db = new SQLite3(':memory:'); $escaped_var = $db->escapeString($var); echo $escaped_var; //Let"s と表示される (何も追加されず。) というように、 シングルクオーテーションはエスケープされるが、 ダブルクオーテーションの方ではエスケープされませんでした。 これは、つまり、 ダブルクオーテーションの方は危険視されていない、 ということだと思いますが、 でも、本当にダブルクオーテーションをエスケープせずに、 そのまま、SQL文につっこんでも大丈夫なのでしょうか?

    • ベストアンサー
    • PHP
  • ダブルクォーテーションのファイル出力について

    文字列をファイル出力する際にダブルクォーテーション(")を表示させるにはどのような方法があるのでしょうか。 私はエクセルのマクロを利用し、Windowsパラメータ設定の簡略化を図ろうかと考えています。 マクロの概要としてはパラメータをエクセルの所定の表に記載し、最後にマクロを実行させることで、 任意のフォルダにパラメータ設定BATファイルを吐き出すといったものです。 その中でIPの設定のBATファイルでつまってしまったので、ご教授下さい。 まず、WindowsでコマンドラインのIP設定にはnetshコマンドを利用します。 たとえば、NIC名:Ethernet、IP:192.168.1.1、サブネット:255.255.255.0、デフォルトゲートウェイ:192.168.1.254 を設定する場合、下記のコマンドを利用します。 netsh interface ip set address Ethernet static 192.168.1.1 255.255.255.0 192.168.1.254 1 マクロではNIC名、IP、サブネット、デフォルトゲートウェイに変数を利用しており、 それぞれNetworkName、IP、Subnet、DefaultGatewayをStringで宣言しております。 VBで上記のコマンドをファイル出力させるときは以下のコードを利用しています。 "netsh interface ip set address " & NetworkName & " static " & IP & " " & Subnet & " " & DefaultGateway & " 1" しかし、NIC名がデフォルトである「ローカル エリア接続」である場合は「ローカル」と「エリア接続」、 の間に半角スペースが入っているため、NetworkNameをダブルクォーテーションで囲う必要があります。 上記のコードでNetworkNameをダブルクォーテーションで囲うにはどのようにすればよいでしょうか。 ちなみにシングルクォーテーションではnetshコマンドでエラーとなります。 宜しくお願いします。

  • ファイルにコーテーション類を書き込む方法

    HTMLのフォーム(Textarea)で入力したテキストを そのまま、ファイルに書き込みたいです。 (正式にはHTMLエディタのようにしたいです) 以下のソースのように作成しましたが、 シングルコーテーションやダブルコーテーションが ファイルに書き込まれる時に¥がついてしまいます。 ================== 入力フォーム =================== <html> <body> <form name='fm' action='fsave.php' method='post'> <textarea name='txt' rows='20' cols='40'> </textarea> <input type='submit' value='ファイル保存'> </body> </html> ================== fsave.php =================== <?php $txt = $_REQUEST["txt"]; $fp = fopen("sample.html","w"); fwrite($fp,$txt); echo "ファイル書き込み完了"; ?> =============== TEXTAREAへの入力値 =================== <a href='aaa.html'>LINK </a> =============== sample.htmlの中身 =================== <a href=\'aaa.html\'>LINK </a> シングルコーテーションやダブルコーテーションを フォームからPHPに渡して、ファイルに書き込むには どうすればよろしのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpの<br>\nと\nとエスケープシーケンスについて

    現在、phpを学んでいるのですが、いきなり"<br>\n"と"\n"の違いがわからなくて困っています。\nはエスケープシーケンスで改行を意味するのですよね?<br>も改行を意味するから・・・わざわざダブルクォーテーションの中に<br>を書かなくても良いのでは・・・ と思うのですが・・・違うのでしょうか!? またエスケープシーケンスについてなのですが、 ¥を付けて表す特殊文字がエスケープシーケンスなのですね。 しかし、シングルクォーテーション内では「¥’」と「\\」だけが使える。 ダブルクォーテーション内では記述すると画面に表示されないということですが・・・。 ではエスケープシーケンスっていつ使うのですか?使い道がないような気がするのですが・・・・。 使えるのは、シングルクォーテーション内の「¥’」と「\\」だけになるのでは・・・・。 そのへんのところを教えてください。

    • ベストアンサー
    • PHP
  • 行頭に記述する+の使い方

    今までPerlを使っていましたが、PHP勉強中です。 ETHNAというフレームワークの使い方を読んでいたのですが、 http://ethna.jp/ethna-document-tutorial-practice2.html -------------------------------  var $action = array(    /*    * TODO: ここにaction定義を記述してください    *    * 記述例:    *    * 'index'  => array(),    */ +   'login'     => array( +     'class_name' => 'Sample_Action_Login', +   ),  ); ------------------------------- ここにある + はどういう意味なのでしょうか。 VBでは命令文の途中に改行を入れる場合行末に _ を入れたりしますが、 PHPではそういうのは関係ないようですし、 PHPのマニュアルにはそういう記述はなさそうでしたので。 http://www.php.net/manual/ja/language.types.array.php

    • ベストアンサー
    • PHP
  • 空文字列の扱い方

    お世話になっています。 質問なのですが、 $a = 0; $b = ""; if ($a == $b){ echo "XXX"; } else{ echo "YYY"; } この式を実行すると、XXXが表示されます。 ちょっと予想外(ひょっとしたら、これが普通なのかもしれませんが・・・)だったので、HELPを見てみると http://php.s3.to/man/language.types.string.html(結構下のほうです。) のようなことが書いてありました。 もし、YYYを表示したかったら、どのようにすればいいのでしょうか? ちなみに、変数の値は変えたくはありません。 変な質問ですが、宜しくお願い致します。 環境: php:4.06 OS:RedHat7.2 以上です

    • ベストアンサー
    • PHP
  • 連想配列を含むヒアドキュメントの書き方

    連想配列を含むヒアドキュメントの書き方を教えてください。 以下のコードならうまく行きました。 -(1)-------------------------- $SS = $_SERVER['PHP_SELF']; $html_txt = <<<EOT ($SS) EOT; echo $html_txt; ------------------------------ これを一時的な変数を使わずに以下のようなコードで実行したいです。 -(2)-------------------------- $html_txt = <<<EOT ($_SERVER['PHP_SELF']) EOT; echo $html_txt; ------------------------------ これを実行すると # Parse error: syntax error, unexpected '"', # expecting T_STRING or T_VARIABLE or T_NUM_STRING in … というエラーが出てしまいます。 最悪、(1)でもいいと思っています。しかし(2)のようなケースでもできてもいいのではないかと思うのですが、エスケープを入れたり「$_SERVER["PHP_SELF"]」などとクォーテーションを変更したりしてもうまく行きません。 質問は以下です ・(2)のような記述はPHPでは不可能なのでしょうか? ・もし可能なら(1)の何が悪いのか、どうすればうまく行くのかを教えてください よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの式について

    かなり基本的な事柄なのですが PHPにおいて【式】とは http://php.net/manual/ja/language.expressions.php の冒頭にある >式は、PHP における最も重要な基盤石です。PHPにおいては、ほとんど全てのものは式で記述されます。最も簡単で最も正確な式の定義は、"全ての式には値がある。" です。 とありますが、つまりは式とは評価したとき返り値を持つものと解釈してもよいのでしょうか? 例をあげると $hoge = 5; //これは式 print $hoge;//これも式 echo (print $hoge); //これも式 print (print $hoge); //これも式 echo (echo $hoge); //これは?実行するとパースエラー なぜ一番最後の例のみパースエラーなのでしょうか? 調べてみると【print】関数・・・というよりprintという言語構文ですか これはどうも常に1という値を返すみたですね。 つまり、本質問の冒頭で申した通り、帰り値を持つものが式とするならば この echo (echo $hoge); は式ではない。 ということになりますか? 以上、ちょっと根本的すぎますが ご教授ください。

    • ベストアンサー
    • PHP
  • dirname(__FILE__)の使い方

    PHPを勉強し始めたばかりの初心者です。 dirname(__FILE__)の使い方を調べていて、いろんなサイトを参考に以下のような 階層を作りました。 |-index.php |-test1.php | |-test2 |    |-test2-1 |     | |     |-test2-2 |       |-test2-2.php | test2-2.phpに、 <?php echo "dirname(__FILE__)"; ?> と記述すればtest2-2までのファイルのフルパスとファイル名が返ってきて 表示されると思ったのですがエラーになり表示されませんでした。 私の解釈が間違っているのでしょうか。 参考にしたサイトのひとつのURLです http://php.net/manual/ja/language.constants.predefined.php ご存知の方、どうかご回答お願いいたします。

    • 締切済み
    • PHP
  • プリぺアドステートメントで変数が認識されない

    趣味でHPを作ろうとPHPを始めました。 初歩的な質問で恐縮なのですがどなたかご協力頂けないでしょうか? 多少省略していますが現在作成中のスクリプトは以下の通りです。 $sql="SELECT * FROM property WHERE price BETWEEN ? AND ? AND citycd=?"; $stmt = $db->prepare($sql); $stmt->execute(array($price1,$price2,$citycd1)); $rows=$stmt->fetchAll(PDO::FETCH_ASSOC); foreach($rows as $r){ echo .$r['plan'].; } 上記のなかでarrayの中の変数が変数として認識されません。 変数は$_POSTで受け取っているものなのですが、受け取りの成功は確認済です。 また、変数の代わりに数字を直で入れれば動くので、やはり変数の書き方に問題があるかと思います。 変数のセットの仕方は { } や '..' など色々あると思います。 マニュアルでそのあたりを調べて何パターンか試してみたのですがうまくいきません。 http://php.net/manual/ja/language.types.string.php 恥ずかしい質問ですがよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう