• ベストアンサー

echo printのパラメータに変数を埋め込む時の問題について

 初歩的な質問ですがPHPでecho print 命令を実行する問題について お聞きします。 $a=10; $b=20; $c=$a+$b; echo "答えは、$cです。"; //(1) echo "答えは、$c です。"; //(2) echo "答えは、".$c."です。"; //(3) を実行すると  (1)は、答えは、まで表示してそれ以降が表示しません。  (2)は、$cに後ろに半角スペースを入れた場合で   「答えは、30 です。」と表示しますが、半角スペースが   入ってしまいます。  (3)は、特に問題なく「答えは、30です。」と表示します。  (1)のように書いた場合、うまく表示されない原因がわかりません。 よろしくお願いいたします。 テスト環境は、 OS:WindowsXP PHP5 Apache2.2 php.iniの文字コードは、UTF-8に設定しています。 ソースコードは、UTF-8で保存しています。

  • PHP
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

ダブルクォート内の$で始まる変数名は、最長のものが仮定されます。また、実はPHPの変数には、多バイト文字(URF-8では日本語はほとんど3バイト)も使えます。 したがって、1の例では「$cです。」が変数名と解釈されました。 { } で囲む事で、PHPに変数の範囲を明確に示す事ができます。 {$a[2]} {$a['hoge']} {$a->foo}のように、配列、連想配列、オブジェクトのプロパティ参照も{ }で囲めば書けます。

LACOMS
質問者

お礼

大変詳しい説明ありがとうございます。 大変参考になりました。ありがとうございます。

その他の回答 (3)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.4

正誤表 URF-8 -> UTF-8

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ちなみになぜパースされないかといえばPHPでは2バイト文字の 変数も存在できるからです。 <?php $a=10; $b=20; $c=$a+$b; $cです。="わかりません"; echo "答えは、$cです。"; ?> もとのソースでは「$cです。」変数になにも値がなかったので、 「答えは、」で表示が終了しているわけですね

LACOMS
質問者

お礼

大変参考になりました。ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

$cのパースがプログラム側で判断できていないからでしょうね そういうときは明示的に変数を{}で囲みます。 <?php $a=10; $b=20; $c=$a+$b; echo "答えは、{$c}です。"; ?>

LACOMS
質問者

お礼

大変参考になりました。ありがとうございました。

関連するQ&A

  • echo "あいう"; としても ブラウザで確認できません

    既出でしたらすみませんが教えていただけ ないでしょうか? phpをやるはめになってしまい、 apache_1.3.34-win32-x86-no_src.msiで http://y-kit.jp/saba/xp/phpsetup.htm を参考にインストールを行いました。 そしてtest.phpとして ----------------------------------- <HTML> <BODY> <? echo "あいう"; ?> </BODY> </HTML> -------------------------------------- と打ってみてブラウザで http://localhost/test.php として確認したところ何も表示されません。 どうすれば 日本語を表示できるように できるのでしょうか? ただし、echo "abc"; としすれば「abc」は表示されるのです。 思うところは文字コードphp.iniの文字コードの ところだと思うのですが…。

    • ベストアンサー
    • PHP
  • phpのECHOが出力されない:wordpress

    A B C "text" というJSONデータのCを画面に出したい時、 echo $obj['A']['B']['C']; もしくは echo $obj->A->B->C; という文をphpの中に書き込んだのですが、 echo ”Halloworld”とかは出るのに、変数になると出ません。 ちなみにfunction.phpでショートコードから呼び出すファイルに記述しています。 何が間違っているのでしょうか。

    • 締切済み
    • PHP
  • セッション変数の受け渡しができない

    a.php: <?php session_start(); $_SESSION['test'] = "ok"; echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "<a href=\"./b.php\">結果ページへ</a>"; echo "</body></html>\n"; ?> b.php: <?php session_start(); echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "</body></html>\n"; ?> a.php の表示: array(1) { ["test"]=> string(2) "ok" } 結果ページへ b.php の表示: array(0) { } 再読込みでも同様です。 php.ini の Session 関係の項目は書籍やウェブサイトを参考にしておかしなものはないと自己判断していますが、指摘されるものを掲載します。

    • 締切済み
    • PHP
  • C#文字コードについて

    お疲れ様です。 いつもお世話になっております。 ディレクトリを開いて、ファイルをstreamreaderで読み込み、 処理をしてstreamwriterで書き込み。 というファイルを作っていて、文字コードの問題にぶち当たりました。 http://dobon.net/vb/dotnet/string/detectcode.html にあるプログラムを実行すると、 ある条件の時に、UTFがsjisと誤認されることがあり、それをなんとか解決できないかと考えています。 ある条件とは、 あa テストPHP など、文字コードがUTF8で、全角と半角英字が隣り合う文字列が合った場合です。 全角と半角数字ではUTF8と正しく認識されるようです。 ただし、 aあ のように、半角英字全角の組み合わせでは誤認は起きません。 同じように、 あ a テスト php と、半角スペースが空いたり あ a と、全角スペースであけてもUTF8と認識されるようです。 普段PHPで、文字コードについて深く意識したことが無かったので、 なぜこういった誤認が起きるのかが検討つきません。 どういったことが原因だと考えられるのでしょうか? また、それを改善するのに何をすればよいでしょうか? よろしくお願いします。

  • echoについて

    echoの使い方について教えてください。 echo ($author!='' ? "$author. " : '') PHPのリファレンスにあるechoの内容を見ましたが、上のような使い方については見当たりませんでした。 この記述は、どのように解釈したらいいんでしょうか? またこの記述方法で実行した場合、出力結果は同じになりますか? これと似た構文でC言語にもありますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数について

    下記の様な、プログラムを作成しておりますが、 にたような変数名を付けており、数字だけを 変化させて表示結果を”ABC”と表示したいのですが、 $a1,$a2,$a3の値を表示するには、どうすれば よいでしょうか? <?php $a1=A; $a2=B; $a3=C; for ($b=1;$b<4;$b++){    echo $a.$b; } ?>

    • ベストアンサー
    • PHP
  • 一般的なechoとprintの実装方法

    お世話になります、php初心者です。 phpでhtmlを出力する際の代表的な2つの関数(echo, print)がありますが、 以下の2点の実装方法のうち、一般的な実装方法はどちらでしょうか。 A index.phpで必要とするhtmlを全て変数に詰めて(必要とする関数を全て実行)、一気にはき出す B index.phpで必要するとhtmlを、逐次はき出す 答えて頂けると幸いです。

    • 締切済み
    • PHP
  • echoの出力がうまくできない

    echoを使ってできないことがあり、自力解決ができないでいます。 お分かりになる方いらっしゃれば解決方法をご教授願います。 【やりたいこと】 WordPressでphpをカスタマイズしています。 その中で下記のことをやろうとしています。 echo '<a href="' . the_permalink() . '">' . the_title() . '</a>'; 【期待する結果】 下記のような感じです。WordPressの関数?の戻り値が展開されて <a href="aaa.html">bbb</> 要はリンクが張られている状態を作りたいのですが、現在の結果は下記のようになります。 aaa.htmlbbb とリンクが張られずにそのまま文字列が表示されてしまいます。 Fifrebugで確認すると、なぜか上記文字列の下に <a href=""></a> と入れられているのがわかりました。 試しにWordPressの関数の戻り値を使わず下記(ハードコード)にすると echo '<a href="' . 'zzz.html' . '">' . 'test' . '</a>'; ただしくリンクが張られています。 また関連するかはわかりませんが、戻り値の扱い方がおかしいのかも判断して 下記のようにしました。 $title = the_title(); 変数に入れるつもりが、なぜかこれが、echoがされた状態になり、(上記のコードだけで)プレビュー画面でタイトルが表示されています。 他にはヒアドキュメントでやっても同じような結果となり、原因がわかりません。 もともとは <a href="<?php the_permalink( ); ?>"><?php the_title(); ?></a> で書いてあったコード(正常に動作)をIF文などの条件が必要になり、(上記の書き方では私の知識ではわかりづらく) <?php ?> のようなブロック単位?に書き直しているタイミングで発生しました。 当方はPerl等メインでやっていますが、PHPは初心者です。ネットで検索したサンプルなどを手直しして使っているレベルです。 識者の方お願いします。

    • ベストアンサー
    • PHP
  • BシェルのECHO_C

    Bシェルでよく使われているECHO_Cは何ですか? 様々な環境における標準出力への対応のものですか? echo \c による効果も教えてください。 以下はよくあるECHO_Cのソースです。 http://64.233.187.104/search?q=cache:0RdNFUznXWAJ:jbj.rapanden.dk/magicrescue/websvn/filedetails.php%3Frep%3D0%26path%3Dmagicrescue/trunk/configure%26rev%3D0%26sc%3D1+echo+testing+c&hl=ja&ie=UTF-8&inlang=ja

  • パラメータを2個つけたい

    ある住所録があり、インデックスをつけてページング処理もさせたいと思っています。 具体的には、「あ」を押すとあ行の人のデータが1~10件表示され、 「next」を押すと、「あ」行の11~20件を表示するイメージになります。 以下のPHPを作成しましたがうまく動作しません。 どうしたらよろしいでしょうか。 ご教授ください。宜しくお願い致します。 ********************************** エラーメッセージ ********************************** Notice: Undefined variable: dtcnt in C:\Program Files\Apache…テスト.php on line 359 359行目が「back」を表示するコードになります↓。 if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> back</a>"; } ****************************** 作成したPHP 環境:PGSQL8.24 PHP5 Apache2.2 ****************************** <a href="テスト.php?x=a">あ</a> <a href="テスト.php?x=ka">か</a> … <a href="テスト.php?x=wa">わ</a> <table> <tr> <th>NO</th> <th>氏名</th> <th>住所</th> </tr> <?php // データベースに接続する $conn = pg_connect("host=サーバ dbname=データベース user=ユーザ password=パスワード") or die("接続エラー"); // 取り出す最大レコード数 $lim = 10; // 表示するページ位置を取得する $p = intval(@$_GET["p"]); if ($p < 1) { $p = 1; } // 表示するデータの位置を取得する $st = ($p - 1) * $lim; // 前のページ/次のページのページ番号を取得する $prev = $p - 1; if ($prev < 1) { $prev = 1; } $next = $p + 1; // データを取り出す if ($_GET['x']=='a') { // あ行 $sql = "select no, name, address from テーブル WHERE (name LIKE N'あ%' OR name LIKE N'い%' OR name LIKE N'う%' OR name LIKE N'え%' OR name LIKE N'お%') ORDER BY name LIMIT $lim OFFSET $st;"; } …(か行~ら行) if ($_GET['x']=='wa') { // わ行 $sql = "select no, name, address from テーブル WHERE (name LIKE N'わ%' OR name LIKE N'を%' OR name LIKE N'ん%') ORDER BY name LIMIT $lim OFFSET $st;"; } // 取り出したデータを表示する for ($i = 0; $i < pg_num_rows($res); $i++) { $row = pg_fetch_array($res, $i, PGSQL_ASSOC); echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".cnv_enc($row["name"], $enc_disp, $enc_db)."</td>"; echo "<td>".$row["address"]."</td>"; echo "</tr>"; } echo "</table>"; // 前のページ/次のページへのリンク if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> back</a>"; } if (($next - 1) * $lim < $dtcnt) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next\"> next</a>"; } // 接続を解除する pg_close($conn); ?> </table> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう