質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6213閲覧

ブラウザの解釈【<? php】は【<!--? php】となぜ変換されるか?

退会済みユーザー

退会済みユーザー

総合スコア0

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/12/30 09:03

こちらのサイトにも何度か質問がありましたが、php ファイルを作り損なったり、普通のhtmlファイルとして読ませた時、ブラウザが勝手に<? php<!--? phpと変換するようなのですが、これはどのような変換が行われているのでしょうか?

<? phpと間にspaceを入れてしまった場合

php

1<? php 2echo "<html><body>Hello PHP</body></html>"; 3?>

ブラウザ表示は

Hello PHP"; ?>

その時の ブラウザ表示のソース?

<!--? php echo "<html--> <html><head></head><body>Hello PHP"; ?></body></html>

実は私の環境では、ソースは上記に記載した内容ではなく、phpファイルの内容そのものだったので、正確に再現できているわけではないのですが、Chrome の elements をみる限り同じような表現になっていたので、質問者さんの環境では、ソースとして表示されているのだと思います。

ブラウザがレスポンスを勝手に解釈をしているのだと思いますが、その原理がわかっていないため、いつも正確な切り分けが出来ず、せっかくの機会なので理解したいなぁと。

これはレスポンスのどの部分にどのように反応した結果なのでしょうか?
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

もともとのテキストがHTMLとしては正しくない、間違っているというこことはわかりますよね。HTML5以降からは構文が間違っていて解析エラー(parse error)が起きた場合、どのようにエラーを回避するべきかパーサーの動作を細かく定義しています。エラー回避により元の文書に補完や置換が行われ、最終的に正しいHTMLとして解釈されます。パーサーの動作は仕様書の下記部分に記載してあります。

W3C勧告書: HTML 5.1 W3C Recommendation#8.2. Parsing HTML documents
WHATWG現行標準: HTML Living Standard#12.2 Parsing HTML documents
※ 内容は基本的に同じです。

HTML5以降に準拠しているブラウザであれば全て同じ動きになります。HTML5より前はブラウザ依存でしたが、HTML5からはブラウザ毎にエラー時の解釈に違いはなく、もしあればバグまたは非準拠です。では、どうしてそのようになるかというと、上の文書を読めばわかりますとしか言い様がありません。この節はユーザーエージェント(ブラウザ)やチェックツールの開発者向け情報なので、日本語訳でも該当部分は訳されていません。頑張って読んでください。(私は諦めました)

投稿2016/12/31 00:55

編集2016/12/31 00:58
raccy

総合スコア21733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/31 02:04 編集

> このようにエラーを回避するべきかパーサーの動作を細かく定義しています。 この情報が知りたかったのですが、この方面に詳しくなかったため、たどり着けませんでした。 やはり決まった動作があり、それに従っているのですね。 特に > HTML5以降に準拠しているブラウザであれば全て同じ動きになります。 これがしれたのが大変うれしいです。 日本語訳、無いのかorz 興味本位なので、どこまで追うか(追えるか)微妙ですが、確認してみたいと思います。 ありがとうございます。大変助かりました。
guest

0

的外れかもしれませんが。
HTML5のリファレンス内の開始タグについての項目には、以下のような記述があります。

  1. The first character of a start tag must be a "<" (U+003C) character.
  2. The next few characters of a start tag must be the element's tag name.
  3. Finally, start tags must be closed by a ">" (U+003E) character.

  1. 開始タグの最初の文字は<であること。
  2. 開始タグの2文字目からは要素のタグ名でなければならない。
  3. 開始タグは>で閉じられてなければならない。

また、タグの名前に有効な文字は半角英数字です(大文字小文字不区別)。

<?phpと記述した場合 --- HTMLファイルに```<?php```の記述があった場合1文字目に```<```があるため、正常なタグと判断してしまいます。 しかし、2文字目には?があり、```?```からはじまる有効なHTMLタグは存在しないので構文エラーとなります。 この構文エラーをパーサが修正したため、質問者さんのブラウザ表示のソースのような内容になったのではないかと思います。 パーサのエラー処理についてHTMLでは**特に規定されていない**はずなので、挙動はブラウザ依存としか言えませんが、質問者さんが使用したChromeでは以下のような段階を踏んだのではないかと推測できます。 0. 構文エラーを修正するため、構文エラーのあった箇所をコメントアウトしようとして、```<?php```を```<!--?php```とする。 0. その後、HTMLの文法に基づいてコメントアウトを終了させようとするので、構文エラーの箇所からいちばん近い```>```に```--```をつけ、```<!--?php echo "<html-->```というコメントができあがる。 0. HTMLタグをコメントアウトしてしまったため、HTMLタグを出力しなおす。 0. HTMLタグ内にHEADタグを出力して、```<body>Hello PHP</body></html>";?>```を修正、HTMLタグ内に追加する。
  1. 結果、以下のようなHTMLになる。

HTML

1<!--?php echo "<html--> 2<html> 3<head></head> 4<body>Hello PHP";?&gt;</body> 5</html>

< ?phpとした場合

< ?phpとした場合、空白文字はタグの名前に有効ではないので、<? php echo "<html><body>Hello PHP</body></html>";?>がそのままパーサに作成されたBODYタグ内に挿入されます。構文エラーであるecho内のHTML, BODYタグはパーサによって削除されたものと考えられます。

投稿2016/12/30 13:47

s8_chu

総合スコア14731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/30 14:21

回答ありがとうございます。 構文エラーを起こした<と>の間をエラー回避のため、ブラウザがコメントアウトした副作用という説明と読みました。 そこでいくつか試してみたのですが、同じような事象が`</`では再現したのですが、他の文字だと再現しませんでした。HTML5に関して正直あまりわかっていないのですが、構文エラー以外のトリガーもあるのでしょうか? 挙動から追っていただいたのだと思うので、少し無茶ブリな気もしますが、もしわかれば教えてください。 よろしくお願いします。
s8_chu

2016/12/31 07:23

解決済みですが、返信させていただきます。パーサによるエラー処理は構文エラー以外にはないと考えられます。</で再現し、他の文字では再現しなかったのは、パーサの構文エラーの処理の仕方が異なるからではないかと。
退会済みユーザー

退会済みユーザー

2016/12/31 08:04

ありがとうございます。 すいません。無茶な質問しちゃって^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問