• ベストアンサー

どうしたらいいんでしょか?

お世話になります。 ディレクトリごとでメニューの表示状態を変えたいと思い、下記のようなプログラムを書いたんですけど、オンマウスの個所が動作しません。原因はどこにあるんでしょうか? 多分、””の使い方がわかっていないと思うのですが・・・。 print "<li><img src='../img/gm_1b.gif' alt='menu1'></li>";の行の src='../img/gm_1b.gif' alt='menu1'の部分のシングルコーテション「'」も本来なら「"」で書きますよね?(htmlでは) なぜシングルコーテションにしないといけないのかわからないし・・・。 どうぞよろしくお願いします。 <ul> <?php //現在のディレクトリを調べる $path = dirname($_SERVER["SCRIPT_NAME"]); //ディレクトリ変数設定 $string1 = "aaa"; if (strstr($path,$string1)) { print "<li><img src='../img/gm_1b.gif' alt='menu1'></li>"; } else { print "<li><a href='#'><img src='../img/gm_1a.gif' onMouseOver='src='../img/gm_1b.gif'' OnMouseOut="src='../img/gm_1a.gif'' alt='menu1'></a></li>"; } ?> </ul>

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

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

ご質問の内容では文法ミスがあります。 わかりにくかったりめんどうならヒアドキュメントを 使うとよいです。 コーテーションの制限を気にする必要がなくなります。 print <<<eof <li> <a href="#"> <img src="../img/gm_1a.gif" onMouseover="this.src='../img/gm_1b.gif'" onMouseout="this.src='../img/gm_1a.gif'" alt="menu1"> </a> </li> eof;

armstrong-us
質問者

補足

ありがとうございます。 ヒアドキュメントなる方法があったんですね。 ところで、eof;を書く場所なんですけど、ネストの都合上、一番左にはならないんですけど、どうも一番左側に書かないとエラーが出てしまうんですけど、それはどうしてなんでしょうか? よろしくお願いします。

その他の回答 (2)

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

言語構造上終端IDはインデントできません。 以下参照ください。

参考URL:
http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc
armstrong-us
質問者

お礼

なるほど、そういうことだったんですね。 ちょっとそのあたりでハマってしまいましたが、無事思うように出来ました。 どうもありがとうございました。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

(*注意 print よりも echoの方がこの場合は適切だと判断しましたのでechoを使ってます printとechoの違いは自分で調べてくださいね) echo "<li><img src=\"../img/gm_1b.gif\" alt=\"menu1\"></li>"; と書いてもいいんですが そういう場合、私ならメンドウなので echo '<li><img src="../img/gm_1b.gif" alt="menu1"></li>'; って書いちゃいます PHP本人からしてみれば文字列の最初に出てくる「"」と構文として扱うべき「"」の区別がつかなくなるからです 例えば echo "<font color="red">"; と書いたとしましょう 人間が見れば red を囲っている「"」と echo構文の初めと終わりをあらわす「"」の区別は尽きますが、PHP側からみればredを囲っている初めの「"」で 文字列終わり! だと勘違いします つまり下記のように別な意味だと見てしまうわけです echo "<font color=" red">";(←エラーが出ます ですから、「"」で囲った時には「'」で 「'」で囲った時には「"」を文字列としてみてくれます echo '<font color="red">'; echo "<font color='red'>"; 又、文字列として扱いたいときには、前に「\」をつけることによりエスケープ(この場合は文字列として扱ってくれる)してくれます echo "<font color=\"red\">"; 「"」と「'」の違いは自分で調べるとして 感覚的に違いを掴むには、下記のソースを実行したあと、ブラウザでソースを表示させてどんなHTMLが吐き出されているか確かめてみてください $data = "あいうえお"; echo '<font color="red">\n$deta</font>'; echo "<font color=\"red\">\n$deta</font>";

armstrong-us
質問者

お礼

ありがとうございました。 ",'でだいぶ謎に包まれていましたが、納得できました。 丁寧に説明してくださり、よく理解できました。

関連するQ&A