• 締切済み

apacheでPHPの文字コードの認識について。

とんちんかんな事を聞いているのかもしれません。 人様の質問に回答した際、分からなくなったのですが・・・。 Apacheってどうやって、PHPの文字コードを判断しているのでしょうか? いろいろな文字コードがあると思いますが、PHPなら、まぁ、SJISとEUCでしょう。 そもそも文字コードは、コードを考えた人が、ここの位置にはこの文字を、っていうお約束ですよね。 とうぜん、コードによって違うので、コードを間違えると文字化けが起こります。 これはブラウザーでも、テキストエディターでも、文字化けが起こります。 ここまでは、知っている知識です。 oeditというエディタは、私が使った中で文字コードの間違いが少ないですが、書かれている内容が短いとコードの自動認識が、うまく働かず、コードを間違えて読むこともあります。(体験 ということは、画像のようにこれはJpegとかGifとか、テキストの見えない部分に書かれてないと言うことでしょうか?(推測 もしそうなら、ApacheはどうやってEUCか、SJISか、他のコードかを区別しているのでしょうか? ローマ字は平気だけど、日本語は文字化けますよね。 たとえば、EUCで書かれているけど、Apacheでご認識してしまって、スクリプトは問題ないのに、エラーが起きることがあるのでしょうか? そもそもApacheはどうやって、文字コードを認識しているのでしょうか?

noname#49406
noname#49406

みんなの回答

  • notnot
  • ベストアンサー率47% (4844/10254)
回答No.2

#1です。質問の意図を理解しました。 いずれにせよapacheはphpファイルの内容には関知しないので、phpのインタプリタの問題になります。 私の知る範囲ではphpは標準では複数バイト文字列に対応していないので、ソース記述にSJISを使った場合は、文字列中に「表」などの2バイト目が「\」と同じコードになる文字をつかうと「\」だと解釈されて意図しない動作になるはずです。SJIS以外の文字列だとそういうことは起こりませんが。もしかして、下記の設定でSJISを指定すると何とかなるのかも(SJISは使ったこと無いのでわかりません)。 複数バイト文字列を使うためには、mbstringライブラリを使う必要があります。日本のレンタルサーバーサイトだと最初から入っていると思います。 http://www.php.net/manual/ja/ref.mbstring.php ソースを記述する文字コードは、php.ini等の中で、mbstring.language ないし mbstring.internal_encoding で指定します。

noname#49406
質問者

お礼

あ、そうですね。 apacheではなく、PHPの動作ですね。 自分でローカルサーバを構築しているのに、失念していました。^^; そうそう、”表”とか”ソ”とか”能”って字ですよね。 ありがとうございます。

noname#49406
質問者

補足

とはいえ、なんかごっちゃになってます、私。^^; たとえば、画像や動画を開く時には、jpegやgifとかがヘッターに書いてあると聞きます。 それを画像閲覧ソフトを見て、画像の種類が分かるとか。 ですが、テキストにはEUCかSJISかは、書かれていませんよね? つまり、PHPはそのファイルを開けるまで、分からないと言うことです。 何かのテキストソフトで、「長文なら文字コードのご認識は起きないけど、短い文だと起こるのは、仕方がない。」と書かれているのを見ました。 おそらくは、PHPやapacheが、パターンマッチするとかそんな感じで、これはEUC、SJIS、他のコードと認識しているはずです。 でも、単文なら、ご認識の可能性もあるのかなー?と。 ・・・、まぁ、重箱の隅をつつく様な、質問ですね。^^; そもそも、テキストファイルの文字コードの認識の仕方は?って質問の方が適切かもしれません。w ありがとうございました。

  • notnot
  • ベストアンサー率47% (4844/10254)
回答No.1

apacheはファイルの中を見ての文字コード判断などはしません。 phpだと、php.ini 等の設定で、default_charset を指定すると、その内容が、HTTPヘッダのContent-Type:ヘッダ行に反映されます。 または、これを空にしておいて、HTML出力の中でMETA HTTP-EQUIVで指定するか。 ブラウザはそれらの指定を見て、文字コードを判断します。もしくは両方とも指定していないと、ファイルの内容から自動判断。

noname#49406
質問者

お礼

>apacheはファイルの中を見ての文字コード判断などはしません。 やっぱり、しないんですね。 ありがとうございます。

noname#49406
質問者

補足

もう一度確認しますが。 ▽PHP EUC形式で保存 ▽ サーバにアップ ▼apache  (この時点で、apacheはファイルの文字コードは、  (認識していないのでしょうか? ▽ブラウザ(default_charset やMETA HTTP-EQUIVで表示を指定 サーバにある時点では、ファイルの形式は関係ないと思います。 ブラウザで要求があって、apacheがPHPのファイルを開きます。 この開く時に、ファイルの形式はどうやって判断されているか?って事なんです。 開く時に、apacheがEUCなのにSJISで認識して実行しまったら、日本語が文字化けて、”実行出来ない”って可能性はあるのかなー?、と。 default_charsetは、ブラウザに出力させる時の指定ですよね。 PHPの読み込み・実行の時はどうなっているのかな?と。 なんか、とんちんかんな質問と書いたのは、apacheがどうやって、ファイルを開いて、実行させているかが、分からないからです。^^;

関連するQ&A

  • PHPの文字コード

    PHP初心者です。 環境【WinXP、PHP5、Apache2、エディタはDreamWeaverかPHPエディタ】 あまり詳しくないので、まず文字コードが今ひとつわかりません。 参考書などでPHPはEUCで記述と書いてあるので、エディタの設定で文字コードをEUC,改行コードをLFに設定しています。 ホームページを作成していた時には、metaタグに文字コードを打っていますが、プログラムの場合必要ないんですか?普段はShift-JISで入力しています。それともmetaタグの文字コードをEUCにしなければいけないのでしょうか? 現在、初めて更新履歴を作成しています。PHPファイルをEUCで作成し、テキストファイルをShift-JISで作成したのですが、うまく表示できませんでした。色々試して、PHPもテキストもShift-JISで作成したら、一応表示されたものの、たまに¥マークが勝手に入ってしまいます。 通常Windows環境でPHPファイルを作成する時の文字コードを教えてください。また、この場合はサイト全体(htmlファイルなど)のmetaタグの文字コードはどうしたらよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字化け(違う文字コードで保存すると不可逆?)

    テキスト・エディタでSJISのテキスト・ファイルをEUCとして開き(この時点で文字化けしてたのですが、それに気付かず)、誤ってそのまま保存してしまいました。 しかも大量のファイルを・・・。 日本語が文字化けしてしまったのですが、これを修復することはできるでしょうか? 一応、EUCのファイルをもう一度SJISで保存し直してみたり、エンコードを読み変えるソフトなどを試してみたのですが、結果はダメでした。 具体的には、以下の手順でやってしまいました。 1.秀丸でSJISファイル(PHPスクリプト)を開く 2.拡張子関連付け(PHPファイル=EUC)によって、開いた時はEUCモード(この時点で文字化け) 3.そのまま(EUCファイルとして)上書き保存 どなたか、修復の方法が分かる方、教えてください・・・・

  • MySQLの文字コードについて

    こんばんは。今、PHP+MySQLの勉強をしているのですが、PHPとMySQLをSJISで保存して接続をすると文字化けはしないのですが、他の文字コードだと一部文字化けをしてしまいます。 どうやったら、他の文字コードでも化けないようにすればよろしいのでしょうか?ちなみにPHPは5.2/Apache2.0/MySQLは5.0を使っておりmy.iniの文字コード設定はデフォルトでSJISにしています。 よろしくお願いします。

  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • includeファイルの文字コードについて

    お世話になります。 PHPでのincludeファイルのことで考えています。 SJISコードで保存されたファイルを、EUCで書かれ ましたPHPプログラムで、文字化けをせずに読み込む 事は可能なのでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPファイルの文字コードについて AS3との連動時に文字化けします

    エディタに秀丸を使用しています。 そして、PHPとXAMPPでインストールしたMySQLを使って、 ActionScript3と連動したコンテンツを作っているのですが、 どうも、Flash上でテキスト表示した場合に文字化けしてしまいます。 そこで、Flash上では、System.useCodePage = trueという、設定をした上で大丈夫なはずなのですが、 色々検索していくうちに、そもそもPHPファイルの文字コードが間違っているのではないかと思うようになりました。 いま、コードを書いているPHPは、 文字コードをEUCとして保存しています。 これをUTF-8にしても変わり有りませんでした。 MySQLのほうの設定でも何か気をつける必要があるのでしょうか。 文字化けの原因を訴求していく際に、 PHPと、MySQLと、ActionScriptと3つあるので、 この3つのうちのどれが、原因箇所かを効率よく突き止めていく ノウハウがあれば教えていただけると幸いです。

    • 締切済み
    • PHP
  • PHP、My SQLを使いますが、文字コードに悩まされています

    Perl使いでしたが、文字コードを強く意識することは ありませんでした。 PHP、MySQLを使いはじめたところ、両方とも文字コードが 大きく関係していることがわかりました。 現在はTerapadなるエディタを使わせてもらい文字コードを 指定し、保存したり、入力方法も変えないといけない? と問題は出てきます。 MySQLでも、UTF8やらEUCやら出てきて、SQLスクリプトを実行した ところ、エラーが出るなど、インポートでエラーが起きるなど もあります。 PHP使いの人は文字コードとどうやってつきあっているのですか? この入力はSHIFTJISでしょうが、入力方法変えないとPHP実行すると エラーが起きますね。でも、こちらでEUCで打ったら文字化けする。 日々文字コードと格闘しています。 どなたか文字コードとの付き合い方を具体的に教えてください。

    • ベストアンサー
    • PHP
  • 文字コード表示

    テキストファイル(htmlやphpなど)の文字コードを一覧で 表示できるようなフリーソフトはありませんでしょうか? 希望のものとしてはフォルダを指定するとフォルダにある ファイルを自動で認識し(できれば仮想フォルダ内のファイルも) ファイルの文字コード一覧が表示され確認できるものを探しています。 対応文字コードはsjis,euc-jp,utf-8n(bomなし)です。 少数のファイルだとテキストエディタで一つづつ確認すれば 済むのですが多数のファイルがある場合かなりの労力になるので 一覧表示できるものがあれば・・・と思いました。 文字コードを変換するものは多数見つかったのですが文字コードを 一覧で表示させるものは見つけられませんでした。 ご存知の方がおりましたら宜しくお願い致します。

  • PHPがローカル環境でのみ文字化けする

    PHPをApache2.0上でローカルテストすると、ブラウザ表示がどうにも文字化けしてしまいます。 EUCで組んだスクリプトをmb_convert_encodingでSJISに変換して出力しているのですが、本番用のサーバーではきちんと動作するのに、ローカル環境ではブラウザがEUCと認識してしまっているようで、文字化けが発生します。 99%php.iniかapacheの設定がおかしいのですが、どこがおかしいか見てはいただけないでしょうか。 php.iniのそれっぽい部分 mbstring.encoding_translation = Off mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none; ;mbstring.func_overload = 0 なお、Apacheのhttpd.confにAddDefaultCharset項目はありませんでした。 特殊要因としてApacheがXAMPPの中で制御されていることなのですが、php.iniはApacheのbinディレクトリ内のものを編集しています。 以上です。 どうかよろしくお願いします。 WinXP SP3 PHP 5.28 Apache 2.0 XAMPP 1.7.0 ※ApacheとXAMPPはPleiadesにてEclipseを導入したときについてきたもの。

    • ベストアンサー
    • PHP
  • javaのファイル読み込み時の文字コードについて

    当方プログラム初心者です。 文字コードがSJIS以外(EUCなど)のテキストファイルをBufferdInputStreamで読み込み、readline()したものをprintlnすると、この時点でファイル内の文字が文字化けします。 環境はEclipseで、実行時はUTF-8でエンコードされるようになっています。 ファイルはサクラエディタで作成し、保存時に文字コードをEUCやSJISに設定しています(デフォルトではSJISで保存される)。 ファイル内の文字列は「ABCDE123アイウエオ」が入っている前提です。 BufferedReaderにInputStreamReaderをラップし引数に読み込みたい文字コードを指定してもダメ、文字コードの引数にJISAutoDetectを指定してもダメ、Eclipseの実行構成をテキストファイルと同じ文字コードにしてもダメでした。 取り急ぎで本当にすみません。皆様の知恵をお貸しください。。。

    • ベストアンサー
    • Java