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

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

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

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

Q&A

解決済

2回答

1896閲覧

session_start()後のheader関数の意味

maguzo

総合スコア57

PHP

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

0グッド

1クリップ

投稿2018/11/08 23:31

$_SESSIONの公式マニュアル(公式)にも触れられていないのですが、
以下の記事のようにsession_start()後に
header("Content-type: text/html; charset=utf-8");
が置かれているコードを見るのですが、どのような意味があるのかわからず、ご質問させていただきました。
参考記事

基本的な質問であれば申し訳ないのですが、参考になる他のマニュアル等でも良いので
ご教示いただけると嬉しいです。

よろしくお願いいた致します。

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

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

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

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

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

guest

回答2

0

どのような意味があるのかわからず

直接の意味としては、HTTPとしてこのコンテンツをWebサーバから返すときのレスポンスの
レスポンスヘッダーの内容をプログラムから指定しています。

これにより、「このコンテンツはhtmlで文字コードはutf-8である」ということを
ブラウザに伝えます。

通常はプログラムでわざわざ指定しなくても、Webサーバが勝手につけてくれますが、
プログラムから指定しているのは、より明示的に
文字化けや、文字コードの違いを利用したXSS攻撃等を防ぐ、というのが趣旨でしょう。

metaタグでも文字コードの指定はできますが、
metaタグ等での文字コード指定ではブラウザ依存が存在する(古いブラウザとかがいうことを聞かないとか)ことや、
コンテンツにうっかりmetaタグを書き忘れたりした場合を考慮して、
あえてcontent-typeレスポンスヘッダの指定をしているのです。

この指定をしたから完ぺき、この指定をしなくてはならない、ということではなく、
うっかり忘れても2重3重に保険を掛けるのが定石で、この例ではそうしているということです。

レスポンスのcontent-typeヘッダに文字コードを正しく指定するにはwebサーバの設定が重要で、
これらの設定を正しく行うことが、優先事項です。

端折ってしまったので追記:
content-typeヘッダの文字コード指定と、metaタグの文字コード指定両方行った場合、
content-typeヘッダの文字コード指定が勝ちます。
このことから、「metaタグで指定しても文字コードが変わらない!apacheの設定が悪い!」
とばかりに、AddDefaultCharsetをOffにするとよい、との記事をよく見かけます。
しかしOffにすると、metaタグは効きますが、今度はmetaタグ必須になり、セキュリティ上のリスクがあります。
この場合これを回避するにはheader()での指定の必要性が上がります。

投稿2018/11/09 01:48

編集2018/11/09 10:49
taka-saan

総合スコア665

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

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

maguzo

2018/11/09 01:57

大変よく分かりました。 当然、htmlのmetaタグで指定されるので、気にする必要はないと思っていました。 webサーバー側でも指定する術とその意味を記憶します。 コメントを頂き、誠に有難うございました。
guest

0

ベストアンサー

この場合、header("Content-type: text/html; charset=utf-8");は、セッションと関係なく、その後の文字がutf-8で書かれたhtml文書としてブラウザにお知らせしているものだと思います。

通常は、htmlの<head>内に<meta charset="UTF-8">と書きますが、参考記事の場合、
htmlの宣言よりも前に、echoで日本語を出力していますので、文字化けしないようにとの配慮じゃないでしょうか?

投稿2018/11/08 23:58

編集2018/11/09 00:28
colling

総合スコア798

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

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

yoorwm

2018/11/09 01:06

<meta charset="UTF-8">は、キャッシュファイルとなった時に、ブラウザが文字コードなどが分からなくなるので入れておく感じですね。 それを気にしないような環境だと、headerでサーバから直接出すデータだけで十分です。
colling

2018/11/09 01:41

>yoorwmさん なるほど、参考記事の<head>に<meta charset="UTF-8">がないのは、header()で出したから必要ないということですね。
maguzo

2018/11/09 02:13

コメント有難うございます。 「それを気にしないような環境」というのは、 → metaタグがキャッシュされる環境であれば、ブラウザが文字コードを認識できなくなる可能性があるので metaタグの記載+サーバー側からheader出力するべき → metaタグがキャッシュされない環境であれば、ブラウザが正しく文字コードを都度認識するので、基本的にサーバー側からheader出力で十分 という認識で正しいでしょうか、念のために確認させてください。 質問差し上げた私が回答の理解に追いつかず誠に申し訳ございません。
colling

2018/11/09 04:01 編集

基本的にはその理解でいいと思います。 キャッシュ 意外にも一度ダウンロードしたhtmlファイルからアクセスみたいなことも想定されますし、いろいろなケースがあると思います。 その、いろいろなケースを想定するならばtaka-saanさんが言うように多重に書くと良いと思います。 質問の内容の、セッションとheader()の関係性はないということです。
maguzo

2018/11/10 12:25

承知をいたしました。 ご教示をいただき、まことにありがとうござました。 重ねて御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問