前提
僕はもともと印刷屋で数年働いていたのですが、その後縁あってWEB屋に転職して現在に至る者です。
WEBの知識は大学生時代にGeocitiesやTripodでWEBスペースをレンタルしてそこにメモ帳でゴリゴリ書いたhtmlをアップする、という程度しか無かったのです。
なので転職してすぐの頃は「Wordpressって何」「いや、そもそもPHPって何」というところからスタートしました。また、転職した職場が教育体制が一切できていないところだったので僕のような無知な人間がいきなりWEBの保守を担当させられる、なんてこともザラでした。
なので僕はPHPに関する知識のベースが一切無い人間なのです。
…という前提があり、PHPを基礎からちゃんと学んでいない僕が現場の仕事をこなしていく上でぶつかった壁や学んだ事を覚え書きとして纏めていきたいと思います。
※なので、ちゃんと学んでいる人からすれば当たり前の事しか書いていないと思われますので、本文中におかしな点がありましたら「いや、それは間違っているぞ!」と突っ込みを入れていただけると助かります。
今回ぶつかった壁
UTF-8のサーバーに置かれた、Shift JISで書かれたPHPをブラウザで見ると盛大に文字化けする。
※もちろんPHPは僕が書いたものではなく、5年以上前に在籍していた人が残したものです。
環境
今回は以下の環境で実施しています。
OS | Apache | PHP |
---|---|---|
CentOS 6.3 | 2.2 | 5.6 |
UTF-8 | ;default_charset = "iso-8859-1" | default-character-set=utf8 |
※VirtualHostで運用。
やったこと
1.Apacheの設定でデフォルトの文字コードを無効にしてみる。
AddDefaultCharset UTF-8
↓ ↓
AddDefaultCharset off
⇒変化なし
2.Virtual Hostの文字コードを以下の様にしてみる。
<VirtualHost *:80>
AddDefaultCharset off
</VirtualHost>
⇒変化なし
3.metaタグをいじってみる。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift-jis">
</head>
curl -I http://example.com/index.php
(中略)
Content-Type: text/html; charset=UTF-8
⇒変化なし
4.header属性をいじる。
<?php
header("Content-Type: text/html; charset=Shift-JIS");
?>
curl -I http://example.com/index.php
(中略)
Content-Type: text/html; charset=Shift-JIS
キマシタワァ*・゜゚・:.。..。.:・゜(n'∀')η゚・:.。..。.:・゜゚・*
結論
PHPはプログラムでヘッダー情報を吐き出しているため、ヘッダー情報を変更したければhtmlではなくプログラム部分のヘッダー属性をいじらないとダメ。