ポピュラーですが聞かせてください。 - PHPプロ!Q&A掲示板

2798

  • 200P

ポピュラーですが聞かせてください。

質問日時 / 2010年7月4日 13:47    回答数 / 9件

Questioner:  hamejiT  このエントリーをはてなブックマークに追加 

キーワード / php    文字化け    mac   

いつもお世話になっております。
ポピュラーなテーマですが聞かせてください。
知恵を拝借できると助かります。

今回は文字化けで苦労しております。
MySQLへのphpMyAdminからの書き込み、phpからの呼び出し表示
は問題なく、文字化けしておりません。

ただ、****.php ファイルに書かれている日本語、
具体的には<HTML>タグ内の日本語が文字化けして???と表示されてしまいます。
英文字は問題なく表示されます。

文字コードはphp, MySQLともにutf-8に統一しています。
もちろん、****.phpファイル内でHTMLはmetaでutf-8を指定しています。
databaseの文字は文字化けなく表示されるので、
MySQL側の設定ではないと推測し、Apache2ファイル内のhttpd.confと
php.iniファイルを中心に見直しています。

ネットで書かれている事をあらかた試しましたが、直せないので困っています。

気になるところとしては
1. phpMyadminで「mcrypt拡張をロードできません。」っていうのと、
2. Apache2/httpd.confが495行と見回ったサイトより短いの2点です。
 →AddDefaultCharset ISO-8859-1という行もなかったです。

さらに追加すると
****.php ファイルでmb_internal_encording();を実行すると
ISO-8859-1と表示されます。
つまり、それは調べたところ≒utf-8とのことですよね。

上記の1.2.が疑わしいのになぜしない?と思われるかもしれませんが、
OSがMac X 10.6.4で、それに合うサイトがなかなか見つからないせいもあります。

面倒かもしれませんが、よろしくお願いいたします。

あと、php.iniは下記の通りとしております。
default_charset = UTF-8
mbstring.language = Japanese
mbstring.internal_encording = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encording_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01slyman>さらに追加すると >****.php ファイルでmb_internal
┣A02shimixslymanさんが書かれているように、とりあえずはphpinf
┗A03hamejiT返事が遅くなってしまいました。 slymanさん, shimix
 ┗A03-1shimix>[mbstring.internal_encoding] no value, no value
  ┗A03-1-1hamejiTshimix さん、ありがとうございます。 再び確認し
   ┗A03-1-1-1shimix>なお、phpファイルのHTMLでは、metaタグでutf-8と設
    ┗A03-1-1-1-1hamejiT.phpファイルはutf-8で記述しています。 ウィンドウ
     ┗A03-1-1-1-1-1shimix>ウィンドウズのメモ帳で書き、文字コードをutf-8に設
      ┗A03-1-1-1-1-1-1hamejiTphpスクリプトは有線LANを組んでいるので、 Mac側の

回答一覧

並び替え:

A01
answererslyman [7月4日 14:48]

>さらに追加すると
>****.php ファイルでmb_internal_encording();を実行すると
>ISO-8859-1と表示されます。
>つまり、それは調べたところ≒utf-8とのことですよね。
上記のように書いてあるのでそうだとは思うのですが、
一応phpinfoで実行時の環境変数調べてみてはいかがでしょう?

この意見に回答する

ツリーへ TOPへ

A02
answerershimix [7月5日 08:25] (最終編集:7月5日 08:27)

slymanさんが書かれているように、とりあえずはphpinfo()の内容をチェックしてください。phpinfo()の結果にはLoaded Configuration File(どのphp.iniファイルを読み込んで適用しているか)も含まれているハズですので、期待したphp.iniファイル(のフルパス)なのかどうかも確認されるといいと思います。

あと、phpとMySQLのバージョンも書いていただけるとよろしいかと思います(どちらも5.x.xでしょうけど・・)。


(蛇足)
>つまり、それは調べたところ≒utf-8とのことですよね。

多分「≠utf-8」と書きたかったのでしょうか・・

この意見に回答する

ツリーへ TOPへ

A03
answererhamejiT [7月6日 23:00]

返事が遅くなってしまいました。
slymanさん, shimixさんありがとうございます。

phpinfoを見てはいるんですが、具体的にはどの項目を見ればよろしいんですか?
文字コードでは目にするのはmbstringですよね?
下記に自分の環境設定を書かせていただきます。

[Directive] Local Value, Master Value 
[mbstring.detect_order] no value, no value 
[mbstring.encoding_translation] Off, Off 
[mbstring.func_overload] 0, 0 
[mbstring.http_input] pass, pass 
[mbstring.http_output] pass, pass 
[mbstring.http_output_conv_mimetypes] ^(text/|application/xhtml\+xml), ^(text/|application/xhtml\+xml) 
[mbstring.internal_encoding] no value, no value 
[mbstring.language] neutral, neutral 
[mbstring.script_encoding] no value, no value 
[mbstring.strict_detection] Off, Off 
[mbstring.substitute_character] no value, no value 

バージョンはPHP Version 5.3.1、MySQL 5.0.5 です。

ちなみに、mb_internal_encording();で参照されるところはどの項目なのでしょうか?
そちらも合わせて、ご教授いただけると助かります。よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A03-1 参考になった
replyershimix [7月6日 23:25]

>[mbstring.internal_encoding] no value, no value 

ということですので、php.iniでutf-8に設定しているのは有効になっていませんね。

あと、Configuration File (php.ini) Path とか Loaded Configuration File というのが最初の表にあると思いますが。どうなっていますか?設定されたphp.iniファイルが Loaded Configuration File に出ていない・・という状態だと思われますが・・。


ただ、

>[mbstring.http_output] pass, pass 

なので、ソースに書いた文字列が「そのまま」ブラウザに返っているハズです。meta要素でutf-8にしていれば(httpレスポンスで他の文字セットを指定していない限りは)化けないと思うのですが、「ソースの記述」はutf-8で間違いないのですよね?

この意見に回答する

ツリーへ TOPへ

A03-1-1
replyerhamejiT [7月9日 01:31]

shimix さん、ありがとうございます。

再び確認したところ、
Configuration File (php.ini) Pathは「/etc」となってました。
 →実際のPathは「/etc/Apache2/php.ini」です。

Loaded Configuration File は「none」となってました。

インストール時に設定されるみたいですが、Macでは標準でインストールされてるので、
どうやって変更したらいいのでしょうか?

php.ini, httpd.confの中を見てみましたが、設定する場所は見当たらなったです・・・。

なお、phpファイルのHTMLでは、metaタグでutf-8と設定してます。

この意見に回答する

ツリーへ TOPへ

A03-1-1-1
replyershimix [7月9日 08:42]

>なお、phpファイルのHTMLでは、metaタグでutf-8と設定してます。

いや、(meta要素にutf-8と書いているのも含めて)ブラウザはレスポンスをutf-8と認識しているからこそ、「ソースを記述している文字コード」を尋ねているのです。エディタで確認できるんじゃないかと思いますが・・


>MySQLへのphpMyAdminからの書き込み、phpからの呼び出し表示
>は問題なく、文字化けしておりません。
>
>ただ、****.php ファイルに書かれている日本語、
>具体的には<HTML>タグ内の日本語が文字化けして???と表示されてしまいます。

ということですから、phpソース内に書かれている日本語がutf-8ではないと推測されます。拡張子を(.phpでなく).htmlにしても化ける状態じゃないんでしょうか?

この意見に回答する

ツリーへ TOPへ

A03-1-1-1-1
replyerhamejiT [7月9日 13:58]

.phpファイルはutf-8で記述しています。
ウィンドウズのメモ帳で書き、文字コードをutf-8に設定し保存しています。

.htmlファイルに関しては同様にutf-8に変更し保存し、日本語は通常通り表示できています。
やはりMySQLでの日本語はOK、HTMLの日本語もOKなので、phpの設定だけと思います。

php.iniのパスが通ってないのが原因でしょうか?
丸々PCをリカバリしないといけないのでしょうか・・・orz

この意見に回答する

ツリーへ TOPへ

A03-1-1-1-1-1
replyershimix [7月9日 15:26]

>ウィンドウズのメモ帳で書き、文字コードをutf-8に設定し保存しています。

メモ帳でutf-8で保存するとBOMが付くんじゃなかったっけ・・。出来ればBOMなし(いわゆるutf-8n)で保存できるエディタを使われた方があとあと妙なところでハマらなくて済みます。


>php.iniのパスが通ってないのが原因でしょうか?

いや、phpinfoでmbstring.http_outputがpassなので「そのまま」ブラウザに返るハズです。(phpinfoで確認された)現在の設定で文字化けする要素が思いつきません。phpスクリプトの外部(MySQL)から取得したutf-8はそのままutf-8で返って来ているわけですから、phpスクリプト内の日本語がutf-8になっていないとしか考えられないのですが・・。

phpスクリプトを編集しているWinPCからサーバ(Mac)への転送はどうされていますか。転送時に変換がかかったりはしていないですよね?

この意見に回答する

ツリーへ TOPへ

A03-1-1-1-1-1-1
replyerhamejiT [7月9日 20:26]

phpスクリプトは有線LANを組んでいるので、
Mac側の共有ファイルにコピーし、Mac側でそれを公開フォルダに移動させるだけです。
変換が間に介在するような方式はとっていないつもりです。

困りました・・・。
phpinfoを直接見てもらうのはセキュリティー上問題でしょうか?
もし、そうでないのなら、直接見てもらった方が早い気も・・・w

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
include されたファイルの変数
 このエントリーをはてなブックマークに追加 
A
出来ます。include(require)は、その部分に読み込むファイルの内容を展開したのと同義です。エディタでファイル読み込み(あるいはコピペ)した状態と同じだと考えていいです。 #defineや変数定義だけの共通フ...

>>続きを読む

shimix様、いつもわかりやすい説明をありがとうございます。 「includeはエディタでコピペした状態と同じ」 この表現、私も授業で使わせていただきたいと思います。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)