質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1478閲覧

サーバ環境を変えると、PHPで出力した全角文字(日本語)が化ける

yukiko

総合スコア41

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/12/03 13:54

HTMLでajax(jQuery)を使ってphpと通信し、MYSQLからデータをもらってHTMLに返す処理を作成しています。

自宅のXAMPP環境ではうまくできたので、ロリポップにソース等を移してテストしたところ、HTMLに返されるデータの日本語が化けます。

MYSQLの環境かといろいろ調べていたのですが、わからないので、とりあえずDBを使わず、シンプルにPHP単体のみで動かしてみたところ、PHP単体でも文字化けすることがわかりました。

PHP

1<?php 2 ini_set("default_charset", "utf-8"); 3 mb_language("uni"); 4 mb_internal_encoding("utf-8"); 5 mb_http_input("auto"); 6 mb_http_output("utf-8"); 7 header('Content-Type: text/html; charset=UTF-8'); 8 echo "日本語OK\n"; 9?>

上記の同じソースで、自宅環境では「日本語OK」とブラウザに表示されますが、ロリポップでは「??????OK」となります。
「PHP,日本語,文字化け」でググっているのですが、なかなか解決に至りません。
ソースもUTF8で書いてあります。

他に確認すべきこと、試してみるべきことがあるでしょうか?
手がかりがあればありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

PHP を動かしている Apache の設定はどうなっていますか?

Apache のエンコードが UTF-8 ではないとか?

投稿2016/12/03 14:00

編集2016/12/03 14:02
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiko

2016/12/03 14:39

ご回答ありがとうございます。サーバ設定等にいまひとつ慣れていなくて…。 「Apache のエンコードが UTF-8 ではないとか?」というのは、php.iniのmbstringのあたりのことでしょうか? さきほど自宅xampp環境のphp.iniを確認したのですが、mbstring関連の部分は、「extension=php_mbstring.dll」ここのコメントを外してあるくらいです。 レンタルサーバのロリポップで触れるmbstring関係の設定部分は、 mbstring.language neutral mbstring.internal_encoding 未設定 mbstring.encoding_translation off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output  pass となっています。
yukiko

2016/12/03 15:33

ロリポップで触れるmbstring関係の設定を変更しました。 mbstring.language japanese mbstring.internal_encoding utf8 mbstring.encoding_translation off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output  pass 参考にしたサイトはここです。 http://www.phpbook.jp/install/phpini/index5.html この変更でうまくいきました。 日本のレンタルサーバなので、日本語に最適な設定になってるはず…と思い込んでいました。 大変勉強になりました。ありがとうございました。
guest

0

難しいですね。
ブラウザのエンコードは固定ではないですか?自動?それぐらいしか思いつかないです・・・。

投稿2016/12/03 14:34

yshima1129

総合スコア179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiko

2016/12/03 14:50

ご回答ありがとうございます。 念のため、FIREFOX、CHROMEでエンコードを変えて確認しましたが、解決しませんでした。 PHP自体にあまり慣れていないので、ものすごく初心者的なところかもです。
guest

0

どうやってサーバーにアップしているのか書いていないのでわかりませんが、自宅で表示できてサーバーにアップして文字化けするということは、サーバーにアップする際に壊れたのでしょう。

転送ソフトには必ずと言っていいほど転送モードがあります。「バイナリ」「テキスト」「自動」など。この指定が適切でないのでしょう。

サーバーに送信する際に「バイナリ」でアップしてください。「テキスト」や「自動」は絶対に使用しないようにしましょう。

投稿2016/12/03 14:14

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiko

2016/12/03 14:30

ご回答ありがとうございます。FFFTPでアップしています。既定値の「ファイル名で転送モード切り替え」で送信していますが、改めてバイナリでも送信して確認したところ、現象は変わりませんでした。
miu_ras

2016/12/03 14:55

…そうですか。それでは以下のコードを実行してください。何が表示されますか? echo bin2hex("あ"); 「日本語OK」の次の行に追加でかまいません。 Win上では「e38182」が表示されると思います。サーバ上ではどうですか?
yukiko

2016/12/03 15:05

「日本語OK e38182」と出ました。あれれー?日本語が出てるー! さきほど、ロリポップのサーバ設定を変えて、設定が反映するまでの5~10分の待ち時間中だったので、それかしら…。 ちょっと設定戻したりして確かめてみます。
yukiko

2016/12/03 15:52

原因はロリポップのサーバ設定だったようです。 phpを触りなれていないので、bin2hexというのも知らず、なんだろう?とググってました。 勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問