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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

4回答

1918閲覧

【PHP】出力時に「<head/>」が自動で先頭に付く

sanset

総合スコア186

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2016/03/05 15:30

ajaxでテーブルのHTMLを取得し、それを表示させるという簡単なプログラムで躓きました。
説明を簡単にするために下記のようなプログラムとしていますが、同じことが起きるので教えていただきたいです。

javascript

1<script> 2$(function(){ 3 4 $.ajax({ 5 url: 'ajax.php', 6 type: 'POST', 7 dataType: 'html', 8 success: function(cmp) { 9 alert(cmp); 10 } 11 }); 12 13}); 14</script>

PHP

1<?php 2 3//ajax.php 4 5$table = ''; 6$table .= '<table class="table">'; 7$table .= '<tr><th>タイトル</th><th>数</th></tr>'; 8$table .= '</table>'; 9 10exit($table); 11 12?>

こんなプログラムを書くと、取得時には

<head/><table class="table"><tr><th>タイトル</th><th></th></tr></table>

と結果が返ってきます。HTMLタグを使用すると、自動で先頭に付くみたいです。

この<head/>というのは何なのでしょうか?調べても全く情報を見つけれませんでした。
また、ajaxから取得時に<head/>というのは不要なので、どうしたら回避できますのでしょうか。
あってもさほど問題ないですが、何か気持ち悪いです・・・。
どなたか教えてください、よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/03/08 08:33

<head/>が入ることを確認したのは、どうやって確認していますか? 確認するのに使ったツールが勝手に挿入している可能性はありませんか?
sanset

2016/03/08 08:37

ありがとうございます。FireFox、Google chromeのブラウザ右クリックのソースを表示と、ajaxで帰ってきた結果のアラートで確認しました。詳しいバージョン等は、家に戻り次第追記させていただきます。
sanset

2016/03/12 16:24

ご連絡遅れて申し訳ありません。今確認したところ、なんと<head/>が付いていませんでした・・・。再現不可ということなので、解決済みにしようと思います。申し訳ありません。環境はエックスサーバーで、PHP5.6のバージョンで行いました。
guest

回答4

0

そのような目的で exit を使用しないでください。代わりに文字列を出力する echo を使用します。

lang

1echo $table;

さらに言えばそのような用途であれば PHP の関数を使用する必要もありません。デフォルトのテンプレートエンジンで十分です。変数の内容なども次のようにして出力できます。

lang

1<?php 2$title = "タイトル"; 3$count = "数"; 4?> 5<table class="table"> 6 <tr><th><?php echo $title; ?></th><th><?php echo $count; ?></th></tr> 7</table>

また、PHP 5.4 以上あるいはそれ以下でも short_open_tag が設定で有効の場合は次のように書くことができます。

lang

1<?php 2$title = "タイトル"; 3$count = "数"; 4?> 5<table class="table"> 6 <tr><th><?= $title; ?></th><th><?= $count; ?></th></tr> 7</table>

またこの例では変数の内容をエスケープしていませんが、HTML を出力する際は htmlspecialchars 関数などを使用して内容をエスケープするべきです。

投稿2016/03/05 16:15

編集2016/03/05 16:18
chitoku

総合スコア1610

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

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

sanset

2016/03/08 08:31

ありがとうございます。確かにexitの使い方が気持ち悪かったですね… 出力方法のご指摘はありがたいですが、<head/>はどうゆう意味なのかが今回の大元の質問なので、そちらもお分かりでしたら書き込んでいただけると幸いです。
guest

0

PHPのビルトインサーバを使ってサーバを立て,全く同じコードを書いたページにChromeからアクセスして試してみましたが,そのような状況は再現出来ません.再現したスクリーンショットの提示,および検証環境の提示などをお願いします.

  • Webサーバ: PHP 7.0.1 Development Server
  • Webブラウザ: Chrome 48.0

ダイアログ

ajax.php

php

1<?php 2 3$table = ''; 4$table .= '<table class="table">'; 5$table .= '<tr><th>タイトル</th><th>数</th></tr>'; 6$table .= '</table>'; 7 8exit($table);
example.html

html

1<script src="https://code.jquery.com/jquery-2.2.1.min.js"></script> 2<script> 3$(function(){ 4 $.ajax({ 5 url: 'ajax.php', 6 type: 'POST', 7 dataType: 'html', 8 success: function(cmp) { 9 alert(cmp); 10 } 11 }); 12}); 13</script>

投稿2016/03/06 18:14

編集2016/03/06 18:23
mpyw

総合スコア5223

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

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

sanset

2016/03/08 08:35

ありがとうございます。家に戻り次第、確認させていただきます。
mpyw

2016/03/08 09:02 編集

一応現時点で原因の予想は出来るので前倒しで書いておきますね.私が用意したコードを私と同じ環境で動かして相変わらずその状況なら,php.ini の auto_prepend_file/auto_append_file ディレクティブで指定されているファイルに問題があります.それらのファイルでやっていることが全ての原因です. http://www.hachi-log.com/prepend-append/
sanset

2016/04/14 02:34

申し訳ありません、たった今返信を頂いていることに気づきました…。 親身にアドバイス頂きありがとうございます、記事を確認させていただきます。
guest

0

自己解決

時間が経って再現してみようとしたところ、なんと<head/>が付かなくなってしまいました。記述は何も変更していません。念のために情報を残しておきます。
・環境はレンタルサーバーのエックスサーバー
・PHP5.6
・Ajaxを介さず直接実行しても<head/>が先頭についていた
・確認はFireFox、Google chromeのブラウザ右クリックのソースを表示と、ajaxで帰ってきた結果のアラート

投稿2016/03/12 16:26

sanset

総合スコア186

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

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

0

<head/>は普通のWEBページのHTMLの頭にある<head>タグですね。
<head> <title>てらてーるー</title> </head>

内容がないので開始タグと終了タグを一つにまとめて<head/>になります。

で、その<head/>タグくっつけてるのはPHPじゃないと思います。exit()にそんな機能なかったと思いますので。

くっつけてるのはjQueryじゃないでしょうか?

$.ajax({ dataType: 'html', })

こいつ。レスポンスをHTMLで要求してるので、返された内容に<head>タグがないからjQueryがくっつけてるんじゃないかと思います…多分…

chitokuさんが書いてるようにexitの使い方が変わってますし、ajaxメソッドでは通常json使ってますのでhtmlの時の挙動はよく知らないので、憶測になっちゃいますが、多分そんな感じです。(100%勘でレスしてます)

投稿2016/03/06 01:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sanset

2016/03/08 08:27

ありがとうございます。ただ、ajaxを使用せずPHPを直接実行しても<head/>は付いておりました。なぜでしょう…
mpyw

2016/03/08 08:59

私は,jQueryがそのような改変を行うことは考えにくいだろう,と考えております.私の回答で検証した通りです.
退会済みユーザー

退会済みユーザー

2016/03/12 23:19

謎ですね… 僕の回答のことはお気になさらずに。書いたとおり100%勘なので外れても不思議はなく。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問