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の設定変更方法をおしえてください

詳しい方お願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/11/27 09:01:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:nc_cls No.1

回答回数15ベストアンサー獲得回数0

ポイント27pt

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

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>
id:blueberrystream No.2

回答回数34ベストアンサー獲得回数5

ポイント27pt

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

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


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

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


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

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

id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント26pt

> これを各ページの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')としています。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません