人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの文字コード EUC-JPとutf-8 に関して

EUC-JPとutf-8を使いたいです。
HPを作成する時に、別のページに文字コードをそれぞれ割り当てます

<meta http-equiv="content-type" content="text/html; charset=○○○"/>
○○○を
01.php はEUC
02.php はutf-8
にします。

(1)同一サーバーで2つの文字コードを使うことは可能でしょうか?
※現在はリナックスサーバーCENTOS5を作りました。
PHPをサーバーに入れています。
PHPの設定がEUC仕様にしているようで、utf-8だと文字化けします。
これを各ページのcharsetに合わせて文字コードを決定するような仕様に変更することはシステム上可能でしょうか?
可能でしたら、PHP.iniの設定変更方法をおしえてください

詳しい方お願いします。

●質問者: rrr3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:EUC EUC-JP HP PHP UTF-8
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● nc_cls
●27ポイント

可能です。以下のスクリプトを改良して試してみて下さい。

PHPファイル自体をUTF-8で記述し、出力エンコードをOUTPUT_ENCでコントロールしています。

UTF-8以外で出力する場合は該当の行のコメントアウトを外してUTF-8の行をコメント化すればOKです。


※蛇足ですがなるべく文字コードは統一した方が無難です。


Dummy

http://www.example.org

<?php
/* PHPファイル自体のエンコード */
define(INTERNAL_ENC ,"UTF-8");

/* 出力時のエンコード */
define(OUTPUT_ENC ,"UTF-8");
//define(OUTPUT_ENC ,"EUC-JP");
//define(OUTPUT_ENC ,"Shift_JIS");

mb_http_output(OUTPUT_ENC);
ob_start("mb_output_handler");

mb_internal_encoding(INTERNAL_ENC);
mb_http_output(OUTPUT_ENC);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?=OUTPUT_ENC?>">
<title>さんぷる</title>
</head>

<body>
あいうえお<br>
かきくけこ<br>
</body>
</html>

2 ● KID the Euforia
●27ポイント

>(1)同一サーバーで2つの文字コードを使うことは可能でしょうか?

可能です。世の中には1つのサーバ上で様々なユーザが異なる文字コードでPHPの出力をしています。


文字化けする原因はおそらくソースファイルの文字エンコードにあると思います。

EUC-JPで出力したい方、この場合は01.phpはEUC-JPで保存し、UTF-8で出力したい02.phpはUTF-8で保存するようにしてみてください。


別問題としてこちらも参考になるかと思います。

http://q.hatena.ne.jp/1168660659


3 ● tezcello
●26ポイント

> これを各ページのcharsetに合わせて文字コードを決定するような仕様に変更することはシステム上可能でしょうか?

最初の回答者さんのようにすれば、ページに記述する文字コードとPHPの内部エンコードや出力エンコードを統一する事は(プログラム的に変更することは)可能ですが、システム的にファイルに合わせてという事はできないと思います。


ただ、文字化けの責任はPHPだけではないかも知れません。

Apacheの返すhttpヘッダとPHPから出力しようとしているものとが不一致の場合、文字化けする可能性がありそうです。

(ブラウザによって、httpヘッダで決めるもの、メタタグで決めるもの、実際の文字データを見て決めるもの...といろいろあるようです。)


PHPからhttpヘッダを出力する事は可能です。UTF-8にするなら、

header('Content-Type: text/html; charset="UTF-8"');

という感じで。

http://jp.php.net/manual/ja/function.header.php


また、勝手に換えられるのは好きではないので、普段はmb_http_output('pass')としています。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ