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

WEBサーバーの設定について質問ですが
mbstring.http_output = passにするとモバイルページは表示されますがPCページが文字化けします
mbstring.http_output = EUC-JPにすると逆にPCページは表示OKでモバイルページが文字化けします
以下現状設定ですがヒントでもいただければ幸いです。
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = EUC-JP;

●質問者: kaji0245
●カテゴリ:インターネット ウェブ制作
✍キーワード:EUC-JP ON サーバー モバイル 文字化け
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tezcello
●35ポイント

Webサーバではなく、PHP(php.ini)の設定ですね。

一般に携帯は Shift-JIS である事を期待しているようです。

mbstring.http_output = pass

でモバイルページが正常なら、PHPから書き出されるHTMLデータのエンコードが Shift-JIS になっているのではありませんか?

(PHPスクリプトを記述しているエンコードなども)

そして、その状態でPCページが文字化けするのは、Webサーバで出力している httpヘッダ、HTML中のメタタグでのエンコード指定が、ブラウザに送られてくる実際のエンコードと一致していないのでは?


状況を把握するのに、以下を教えていただけませんか?(ご自分で確認するだけで解決するかもしれませんが)

PHPスクリプト(やスクリプトで読み込む書類)のエンコードは何でしょう?

Webサーバのデフォルトエンコードは何になっているでしょうか?

Apache なら、httpd.conf の AddDefaultCharset の値(デフォルトではUTF-8だったかな)

メタタグでエンコードの指定をしていますか?

PCで文字化けする時、使っているブラウザは何でしょうか?

PCで文字化けしている時に、ブラウザのエンコード(文字コード)を何にすると正常に見る事ができますか?


直接今回の回答にはなりませんが、php.ini 設定の例 が載っています

http://www.php.net/manual/ja/ref.mbstring.php

◎質問者からの返答

>PHPスクリプト(やスクリプトで読み込む書類)のエンコードは何でしょう?

>Webサーバのデフォルトエンコードは何になっているでしょうか?

php.ini内にて下記の表示がありました。

default_charset = "Shift_JIS"

httpd.conf内には↓の表示が数多くありますがAddDefaultCharsetの表示はありませんでした。

AddCharset *****

>PCで文字化けする時、使っているブラウザは何でしょうか?

FFです。ちなみにIEでは真っ白になります。

>PCで文字化けしている時に、ブラウザのエンコード(文字コード)を何にすると正常に見る事ができますか?

どれにしても正常にはみれません(ToT)


2 ● tezcello
●35ポイント

説明が足らずに申し訳ないです。

> >PHPスクリプト(やスクリプトで読み込む書類)のエンコードは何でしょう?

> >Webサーバのデフォルトエンコードは何になっているでしょうか?

> php.ini内にて下記の表示がありました。

phpの設定をお尋ねしたのでは無く、phpプログラム(といった方が分かり易いでしょうか)を書く時にどんな文字コードを使われたかが知りたかったのです。

<?PHP ・・・?>が書かれている○○○.phpというファイルです。


因に

> default_charset = "Shift_JIS"

が書いてあると、ここに記述したエンコードをヘッダで出力するそうです。

http://www.php.net/manual/ja/ini.core.php#ini.default-charset


どのようなサーバ環境かは分かりませんが、デフォルトからかなり変更されていませんか?

default_charset = "Shift_JIS"

があるのに

mbstring.http_output = EUC-JP

となっているのは矛盾を感じます。普通のディストリビューションでこのような設定になっているとは思い難いです。


> httpd.conf内には↓の表示が数多くありますがAddDefaultCharsetの表示はありませんでした。

その付近にコメントで、デフォルトはUTF-8であるとか書いてありませんか?

コンソールなどで、

apachectrl fullstatus

とコマンドを打つとずらずらっと現在の設定内容を表示してくれるようです。

その出力にデフォルトのキャラクタセットが載っていると思います。


> >PCで文字化けする時、使っているブラウザは何でしょうか?

> FFです。ちなみにIEでは真っ白になります。

IE で真っ白という事は、メタタグでエンコードを指定していないのでしょうね。

やっぱり、文字コード(エンコード)がおかしくなっているような気がします。

実際にサーバから送られて来たHTML文書としてのエンコード、HTTPヘッダの内容、PHPの内部処理等の設定に不整合があるのではないでしょうか。


> >PCで文字化けしている時に、ブラウザのエンコード(文字コード)を何にすると正常に見る事ができますか?

> どれにしても正常にはみれません(ToT)

mbstring.encoding_translation = On

mbstring.http_output = EUC-JP

mbstring.internal_encoding = EUC-JP

となっていて、更にPHPプログラム(あるいはHTML書類)がShift-JISになっている(と予想します)

ので、

Shift-JIS文字列をEUC-jpだと思い込んで変な変換をしているなどが起きているような気がします。


サイト全体の事なので、どのような設定にするかは、オーナーさんのポリシーで自由なんですが、

僕は、この先XMLが使われる事が多くなるだろうと予想しているので、基本はUTF-8で書くようにしています。(スクリプトも、データも、HTML文書も)

で、入出力の際に勝手に変換をされると、間違いに気づかない可能性があるのでHTTPの入出力は pass に、

当然その流れから、自動変換(mbstring.encoding_translation) も無効に。

携帯用に出力する場合は、全出力内容が入っている変数の中身をShift-JISに変換してから出力。

のようにしています。


今のphp.iniの設定は、(この辺りはデフォルトから変更していなかったと思うけどなぁ)

mbstring.encoding_translationOff

mbstring.func_overload0

mbstring.http_inputpass

mbstring.http_outputpass

mbstring.internal_encodingno value

mbstring.languageneutral

mbstring.substitute_characterno value

となっていて、普段PHPプログラムを書く時は最初の方で、決まり文句としてこんなのを入れています。

define(SITE_LANG,'ja');
define(SITE_CHARSET,'UTF-8');

set_magic_quotes_runtime(false);
mb_http_output("pass");
mb_internal_encoding(SITE_CHARSET);
mb_language(SITE_LANG);
mb_regex_encoding(SITE_CHARSET);
header("Content-Type: text/html; charset=".SITE_CHARSET);

一旦定数にしてから設定しているのは、他でも使うかもと思っただけですから気にしないで下さい。

◎質問者からの返答

ありがとうございます。/mobile以下に下記を記述することにより

文字化けは直りました。

どうしても漢字が化けてしまう部分が1箇所↓だけあり原因不明ですがローマ字"Reserve"に変更しました。

$system->MakeLink(1,"Reserve",$system->installation."Phase1.php?hcnt=1");

>define(SITE_LANG,'ja');

>define(SITE_CHARSET,'Shift-JIS');

>set_magic_quotes_runtime(false);

>mb_http_output("pass");

>mb_internal_encoding(SITE_CHARSET);

>mb_language(SITE_LANG);

>mb_regex_encoding(SITE_CHARSET);

>header("Content-Type: text/html; charset=".SITE_CHARSET);

関連質問


●質問をもっと探す●



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