プロが教える店舗&オフィスのセキュリティ対策術

DBを呼び出すPHPファイルを"Shift_JIS"で作りました。
ですが、レンタルサーバーのPHP、MySQLの文字コードが"EUC-JP"との事で、
全てのファイルに読込んでいるインクルードファイルの文字コードの記述をShift_JISからEUC-JPに変更しました。
ですが、DBから呼び出してるデータは文字化けしないのですが、その他がすべて文字化けしてしまい、JavaScriptも動かない状態です。
各phpのファイルは、最後に$body で書き出す記述をしているので、
$body = mb_convert_encoding($body,"SJIS","EUC-JP");
print $body;
と実行してみてもだめでした。
どうか教えて下さい。よろしくお願い致します。
---共通インクルードファイル----
省略
//MySQL読み込み時の文字コードを設定
mysql_query("set names EUC-JP");

//データベースを選択します
mysql_select_db($DBNAME,$db);

function htmlheader($pagetitle)
{
//各ページのヘッダ部のHTMLを組み立てる
$strret = "<DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<HTML>
<HEAD>
<META http-equiv='Content-Type' content='text/html; charset=EUC-JP'>
<META http-equiv='Content-Style-Type' content='text/css'>
<TITLE>$pagetitle </TITLE>
</HEAD>
<body border='0' cellpadding='0' cellspacing='0' width='100%'>
<br>";
return $strret;
}
function htmlfooter()
{
//各ページのフッタ部のHTMLを組み立てる
$strret = "<br>
</BODY>
</HTML>";
return $strret;
}
?>

A 回答 (2件)

>各phpのファイルは、最後に$body で書き出す記述をしているので、


>$body = mb_convert_encoding($body,"SJIS","EUC-JP");

つまりMySQLの文字コードを EUC-JP で出力して SJIS に変換して表示しているのですよね。
その場合ページの文字コードはSJISですから

<META http-equiv='Content-Type' content='text/html; charset=EUC-JP'>

ではなく

<META http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>

と宣言しなければならないのではないでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
全体をcharset=Shift_JIS'で宣言して、データベースを読み込む際にはEUC-JP、呼び出した後にひとつづつ、mb_convert_encodingでSJISに変換したら、うまくいきました。ありがとうございました。

お礼日時:2006/12/30 13:53

PHPもMySQLもそれほどよく知らないので的外れだったらごめんなさい。

SJISで作ったものをEUC-JPで読み込もうとしたら文字化けするのは当然のような気がします。該当ファイルをEUC-JPで作り直したらうまくいくのではないでしょうか。

この回答への補足

作ったPHPファイルの中には、インクルードファイルをSJISからEUC-JPに変えただけで動いているファイルもあるのですが・・・。
文字化けしていないPHPファイルは、最後に$body で書き出す記述をしていないものです。htmlのテーブルのなかに、<?php $data ?>と書き込んでいるタイプのものです。それは、DBから呼び出しているデータもhtmlの文字も文字化けしていません。(説明が下手で申し訳ありません)

補足日時:2006/12/24 18:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!