※ ChatGPTを利用し、要約された質問です(原文:携帯サイト文字化け)
携帯サイト文字化け
いつもお世話になっております。
現在、既存システムの携帯サイトを作っているのですが、
auでの文字化けが解決できずに困っています。
1週間程悩んでいるのですが、
自分で解決するにはかなり限界がきています。
そこで、ここのサイトで質問させて頂くことにしました。
詳細内容
・開発言語:PHP
・データベース:MySQL
・文字コード:EUC-JP(既存システムが全てEUC-JPで作成されているので、携帯サイトもEUC-JPで作成しています。)
・システム概要:既存システム(物件検索システム)の携帯対応
データベースに保存されているデータを取得して、表示させる。
・バグ内容:auでの文字化け
*ただ、au携帯でも文字化けが起こる機種と起こらない機種が存在します。
例えば、W61SAだと起こりませんが、W44TやW53CAだと文字化けが発生します。
ヘッダー部分の書き方に問題があると思うのですが、
文字化け対策についてアドバイスを頂けないでしょうか?
<?php
//キャリア判定_start
function GetCarryer($agent){
if (preg_match("/^DoCoMo\/2\.0/i", $agent)) {
// DoCoMo FOMA (XHTML)
$type="DOCOMO";
} else if (preg_match("/^DoCoMo\/1\.0/i", $agent)) {
// DoCoMo MOVA
$type="DOCOMO";
} else if (preg_match("/^SoftBank/i", $agent)) {
// SoftBank
$type="SOFTBANK";
} else if (preg_match("/^(Vodafone|MOT-)/i", $agent)) {
// Vodafone 3G
$type="SOFTBANK";
} else if (preg_match("/^J\-PHONE/i", $agent)) {
// Vodafone 1G,2G
} else if (preg_match("/^KDDI\-/i", $agent)) {
$type="AU";
// au (XHTML)
} else if (preg_match("/UP\.Browser/i", $agent)) {
// au (HDML) TU-KA
$type="AU";
} else if (preg_match("/WILLCOM/i", $agent) || preg_match("/DDIPOCKET/i", $agent)) {
// WILLCOM Air EDGE
$type="SOFTBANK";
} else if (preg_match("/^PDXGW/i", $agent)) {
// WILLCOM EDGE LINK
$type="SOFTBANK";
} else if (preg_match("/^(L\-mode)/i", $agent)) {
// L-mode
$type="NG";
} else { //PC or フルブラウザ
$type="PC";
}
return $type;
}
$agent = $_SERVER['HTTP_USER_AGENT'];
if(GetCarryer($agent)=="PC"){
print<<<ERROR
<div style="margin:20px auto 0px auto;text-align:center;color:#4E4E4E;font-size:14px;">このサイトはパソコンからは見ることが出来ません。</div>
ERROR;
exit;
}
//キャリア判定_end
//DocomoのCSS対策
header('Content-Type: application/xhtml+xml; charset=EUC-JP');
print <<<DATA
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
DATA;
?>
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=EUC-JP" />
<meta http-equiv="Content-Type" content="text/css" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta name="description" content="" />
<meta name="keywords" content="テスト投稿1件目" />
<title>モバイル版テストページ</title>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<a name="top"></a>
<div style="background-color:#333399"><div style="font-size:xx-small; color:#FFFFFF; text-align:center">モバイル版テスト用会社</div></div>
<div><img src="../../../img/spacer.gif" height="5"></div>
<div style="font-size:xx-small;">
<div style="color:#000099;">テスト投稿</div>
<hr size="1" style="margin-top:2px;margin-bottom:2px;" />
<div><img src="../../../img/spacer.gif" height="3"></div>
<div style="font-size:xx-small;">
テスト投稿07<br />
<?php
/** 処理省略(データベースからデータの取得と出力処理) **/
?>
<a href="#">>>詳細へ</a>
<br />
</div>
<hr size="1" style="margin-top:2px;margin-bottom:2px;" />
<a href="#" accesskey="0">トップページへ</a>
</div>
</body>
</html>
お礼
ご回答ありがとうございます。 そうですね、 一度Shift-JISに変換してから表示させてみます。 文字コードについても現在勉強中で、 コードの変換方法などを調べて修正してみます。