xhtml と php


0   名前: 骸骨 : 2006/07/22(土) 23:53  ID:Dm4W3F4x
失礼します。

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE
	html PUBLIC
	"-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
>
<html xmlns="http://mysite/" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
</head>
<body>
<?php
	echo 'aaa';
?>
</body>
</html>


と記述した .php ファイルを作成してテストしてみたところ、

Parse error: syntax error, unexpected T_STRING in (略)write.php on line 1

というエラーが出てきてしまいます。
ちなみに1行目を消せば上手く行きます。

windows の xampp と IE でチェックしてるんですが、
そもそもボディタグに直書したテキストも
表示されてしまうし、xhtml として扱われているのかも分かりません。
ホワイトスペースの位置が駄目とか、あるんでしょうか。

分かる方いらっしゃいましたら、どうかお願いします。

1   名前: Pid : 2006/07/22(土) 23:53  ID:PQ7qM3tb
エラーメッセージをそのまま Google 先生に食べさせれば,饒舌にしゃべってくれますよ。原因も解決法もさまざまなようなので,ご自身の条件に合ったものを探して下さい。

余計なことですが,>>0 の吐くソースは XHTML 1.1 として不正ですが,大丈夫でしょうか(XHTML 1.1 は XML なので,なるべく厳密に考えた方が無難です)。

2   名前: のっと : 2006/07/22(土) 23:53  ID:943Mtr/I
<?php echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  <head>
    <title>XHTML と PHP</title>
  </head>
  <body>
    <?php echo '<p>aaa<p>'; ?>
  </body>
</html>


>Parse error: syntax error, unexpected T_STRING in (略)write.php on line 1

この書き方はまずかったですね。
“(略)”では何も情報は伝わりません。
ファイルへのフルパス、とでも書いておくべきでしたね。

で、原因はXML宣言の "<?" という部分です。
PHPのショートカットタグに該当しているため、XML宣言をPHPの構文と判断しているため、解析に失敗しています。
解決方法としては……

1. PHPのショートカットタグの使用をオフにする

.htaccessが使えるのならば、次の一文を加えてみるといいと思います。

php_flag short_open_tag Off



2. XML宣言をPHPによって書き出す

これが一番確実な方法です。
.htaccessによる方法だと、.htaccessが使えない場合などには適用できません。
冒頭のソース例で示した様に

<?php echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
...


とすると

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
...


と出力されます。


参考:
http://www.google.co.jp/search?hl=ja&q=Parse+error%3A+syntax+error%2C+unexpected+T_STRING&btnG=Google+%E6%A4%9C%E7%B4%A2&lr= (Google 検索結果:Parse error: syntax error, unexpected T_STRING)

3   名前: 骸骨 : 2006/07/22(土) 23:53  ID:Dm4W3F4x
ご回答ありがとうございます!

>>余計なことですが,>>0 の吐くソースは XHTML 1.1 として不正ですが,大丈夫でしょうか
いえ、余計だなんてとんでもないです!
まだ「サイトを作ってみたいな」と考えてあれこれ覚え始めの最中なので、
とっても参考になります。
恥ずかしい話自分ではちゃんと書いているつもりなので、どこがどう不正なのかすら
わからない状態です。
IEで動くかどうかでチェックして手探りで探している感じなので、
IEが正しく準拠していないところやあいまいさを許すところに引っかかっていないか
心配なのが現状です。もっとIEが厳密だったらわかりやすいと思うのですが…。

グーグル先生にも教えを請うたのですが、どれが何を意味しているのかすら理解が難しい
状態で、ローカルへの php のインストールも、ちゃんと出来てるかどうか怪しいくらいです。
記入した文字列に不正があるというエラーだということしか理解できませんでした…。

スクリプトやら DHTML なども、ブラウザ依存の状況でかなり作っていそうですが(というか確実…)
正直そこまでは頭が回らないでいます。まずは先に形として完成させてしまおうと思うので…。

イベントが思うように動いてくれなかったりで、スクリプトは手軽で簡単だと思っていたのに
実は扱いが難しいものだと痛感しております。

>>この書き方はまずかったですね。
申し訳ありません!
もしも次に質問する時はちゃんとさせていただきます。

>>2. XML宣言をPHPによって書き出す
このやり方で対応させていただこうと思います。大変感謝致します。

ありがとうございました。

4   名前: 骸骨 : 2006/07/22(土) 23:53  ID:Dm4W3F4x
…あ!
申し訳ありませんが、
<?php echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n"; ?>
として解決するのは分かりましたが、php はこれを解釈せずともよいのでしょうか??
php は XML を理解できないわけではありませんよね…?

それから、<meta> タグは必要なかったのでしょうか?

また、XML として不正な点も、できたら指摘していただければありがたいのですが…。

軽々しい質問で無理を言っているかもしれませんが、
もしよかったらご回答願えませんでしょうか…?

5   名前: のっと : 2006/07/22(土) 23:53  ID:943Mtr/I
><?php echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n"; ?>
>として解決するのは分かりましたが、php はこれを解釈せずともよいのでしょうか??

“解釈せずともよい”というのは、どういうことでしょうか?

>それから、<meta> タグは必要なかったのでしょうか?

XHTML 1.1 では推奨されるMIMEタイプは "application/xhtml+xml" で、可能なのが "application/xml", "text/xml" となっています。そして、 "text/html" は非推奨となっています。
そして、推奨されている "application/xhtml+xml" のMIMEタイプを指定したXHTML文書には http-equiv の属性を持つ meta 要素は書くべきではない、とされています。
なので、 http-equiv が指定されていた meta 要素は書いていません。

私見ですが、現実問題としてXML宣言のキャラクターセットの指定を理解できないブラウザも少なからずある現状を見ると、 XHTML 1.1 はより多くの環境への公開を考えると少々、難がある様に思えます。
というか、肝心のIE様が "application/xhtml+xml" に対応してくれていません。
私は、 XHTML 1.1 よりも XHTML 1.0 を宣言して、 "text/html" のMIMEタイプで作成する方が現段階ではより良いのではないか、と思います。
そうすれば、 meta 要素でキャラクターセットの指定も行う事ができます。

6   名前: 骸骨 : 2006/07/22(土) 23:53  ID:Dm4W3F4x
>>“解釈せずともよい”というのは、どういうことでしょうか?
…あ!!
PHP がサーバー側で一通り html を解釈してから PHP 構文を処理している、
というイメージだったんですが(その過程でちゃんと理解できない文があって
はまずいんじゃないか、という意味の質問でした)、
先の質問の件(“<?”の件)を考えると、単純に“<?”を探してその部分を
置き換えているだけ、という処理が推測できますよね。
…あさはかでした。

xhtml を選択したのは、初心者には間違いだったのかも、と感じました。
対応状況からして難がありそうな xhtml は、もしかすると素通りされて
しまうものなんじゃないか、と…。
これは html にした方が無難かも…。

ご回答、とても参考になりました。大変ありがとうございました。

一覧へ戻る