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

phpの文字コード変換で困っています。

utf-8でコーディングしていて、
携帯用のサイトなのでShift-JISに変換して
サイトに出力しようと思っています。

$out = mb_convert_encoding($out, "SJIS", "UTF-8");

のようにしてみて、$outをechoしたのですが、
文字が化けてしまいます。

一応$out内のhtmlのhead部分には
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
と書いてあります。

utf-8で書いてutf-8で出力するのは問題なかったのですが、
まさかshift-jis変換でハマるとは・・・。

shift-jisでプログラムもタグも書いた方が楽な気がしてきましたが、
PC向けサイトのコードとごっちゃになりそうなので、
なんとかutf-8で書いてshift-jisで出力したいです。

何かミスしていそうなところを
アドバイスして頂けると助かります。

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:echo HTML JIS Out PHP
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● studioes
●100ポイント ベストアンサー

WebサーバはApacheでしょうか?

Apacheの場合、httpd.confのAddDefaultCharsetでISO-8859-1がインストールデフォルトで設定されているので、これを無効にしないとヘッダでISO-8859-1が明示されるため、METAよりもこちらが優先されてSJISやEUCは化けることがあります(UTF-8だけは検出されます)

ソースにBOMが付いていませんか? BOMがあると、UTF-8として認識されるため、SJISをUTF-8として解釈しようとするため、化けることがあります。

◎質問者からの返答

どうもありがとうございます。

xreaサーバーなので、Apacheだと思います。

一応phpのファイルでBOMをつけないで保存してみましたが、

文字化けしてしまいました・・・。

初めの段階で、

$out = mb_convert_encoding($out, "SJIS", "UTF-8");

を書かなければ正常に表示されます。

その場合、

<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

としても、正常に表示されます。

文字コードについて、ちょっとわけがわからなくなってます・・・。


2 ● Knoa
●19ポイント

HTTPのヘッダじゃないかしら。

httpd.confや.htaccessで制御することもできますが、PHPでやるなら、これ書いてみて。

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

◎質問者からの返答

どうもありがとうございます。

echoの1行前に入れてみましたが、ダメでした。

$outの前でもダメでした・・・。

$out = mb_convert_encoding($out, "SJIS", "UTF-8");

$out = mb_convert_encoding($out, "UTF-8", "UTF-8");

にすると正常に表示され、

$out = mb_convert_encoding($out, "SJIS", "SJIS");

にすると、だいたい正常に表示されるのですが、

一部の文字、例えば ) 等が「?」に文字化けしたりしています。

何かくだらないミスをしてそうな気がしてきました・・・。


3 ● しおり
●18ポイント

charset 名が間違っています。

charset=Shift-JIS

じゃなくて、

charset=Shift_JIS

です。


参考:http://www.iana.org/assignments/character-sets

◎質問者からの返答

どうもありがとうございます。

た・たしかに・・・。

修正してみましたが、表示は変わらずダメでした。

表示したページのソースを見て、

そのHTMLソースをテキストエディタで

文字コードをShift_JISにして読み直すと、

正常な文字列になります。

ただ、一番初めの

・ソ・ソ・ソ・ソ・ソ・ソ

という謎の文字列が出現しました。

$outには、

$out = '

....

...

';

という感じで入れてあります。


4 ● tezcello
●18ポイント

問題点の切り分けから...


metaタグは単なるお知らせらしいので、これを変えただけでは思うように変わりません。

エンコードの場合、

と指定できるところがあり、ブラウザによってどれを見ているかは様々です。


実際に Xrea で、UTP-8 で書いたものを Shift-JIS に変換して出力してみましたが、手元の携帯ではチャンと見えています。(もっとも、最近の携帯は UTF-8 のページもチャンと見る事ができるようですが)

◎質問者からの返答

どうもありがとうございます。

・文字化けは、携帯とPC両方なります

・文字化けは、全ての文字で発生します

・ブラウザで見ると、euc/utf-8/shift-jis/jis全てダメでした

・Shift-JISで再保存しましたが、ダメでした

・mbstring.http_outputは書いていないです

確かに最近はUTF-8でも見ることができますよね。

初めはそれでいこうとしたのですが、

はてながShift-JISっぽいからあわせようかなぁと思ったら

ハマッてしまいました・・・。


5 ● しろっくす
●18ポイント

絵文字で文字化けしているのでしょうか?

SJIS-winという文字コードを使えば解消されるかもしれません

http://hain.jp/index.php/tech-j/2006/10/04/

◎質問者からの返答

どうもありがとうございます。

絵文字は使っていないです。

絵文字が入ると、これまたややこしくなりそうですね。

先にチェックしておきますね。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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