phpで書いたプログラムを保存するときの文字コードは、何に合わせたらいいのですか?

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/05/17 11:40:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント25pt

phpはShift-JIS での記述は推奨されない様です。

文字化け云々よりも、正規表現系の関数が正常に機能しない可能性が高い(問題なく動作する事もあるが)のは、かなりもったいないのではないでしょうか?


サーバのエンコードに合わせるのが良いと言う記述はよく見かけます。

僕は、xmlを扱う事増えて来たので、スクリプトの先頭で、内部コード・正規表現のコードをUTF-8に、HTTP入出力をpassに、入力クエリのエンコードの自動変換をoffに、を指示してUTF-8で使ってます。もちろんスクリプトの保存はUTF-8です。

(うちのサーバは EUC-JPなので、これらを決まり文句として書いてます。)


携帯用のサイトは出力前に自分でShift-JISにエンコード変換をすればいいでしょうね。EUCやUTFでも問題ないようになって来ているみたいですが。

今時Shift-JISしか理解出来ない(PCの)ブラウザはまず無いので、チャンとヘッダや(x)html内で宣言してあれば文字化け問題は起きないでしょう。

id:sun-chan

ご回答ありがとうございます。

webについては

>> 今時Shift-JISしか理解出来ない(PCの)ブラウザはまず無いので

ということで理解しました。


phpの保存は、

>> phpはShift-JIS での記述は推奨されない様です。

は初めて知りました。ありがとうございます。

>> サーバのエンコードに合わせるのが良いと言う記述はよく見かけます。


というのは、webページの ヘッダーで宣言してある文字コードということでしょうか?

もしくは、別にサーバ全体で何か設定してある文字コードというのがあるのでしょうか?

2007/05/16 08:32:59

その他の回答3件)

id:onigirin No.1

回答回数327ベストアンサー獲得回数23

ポイント20pt

ご自信のWEBサイトの文字コードにあわせるといいと思います。

うちの場合は、Shift-JISで今までhtmlを作っていたので、

phpもShift-JISです。

だいたい統一しておけば、問題ないと思います。

id:sun-chan

ありがとうございます。

php, webpage, MySQL内のデータと、あって、最善なのは全ての文字コードをそろえることなんでしょうか。


今MySQL内のデータの文字コードを調べているところなので、それが終わったら再検討してみます。

ありがとうございます、

2007/05/15 17:38:52
id:praide No.2

回答回数1ベストアンサー獲得回数0

ポイント20pt

サーバーの設定も関係しますし、

文字コードを合わせていないと、文字化けを起こさないですか?

統一するのは大切だと思います。

基本的にはEUCでとうたわれていますが、

自分もサイトをShift-JISで組むことが多いのでそれにあわせています。

id:sun-chan

今のところ文字コードのことは考えていなかったんですが、ウェブ上では文字化けは起きていません。

phpMyAdminでMySQLを見ると文字化けしていますけど、ウェブ上に表示したら問題なく見えています。

UTF-8をお勧めされているんですが、あんまり標準的ではないんですかね・・・

うーん。

回答ありがとうございました。

2007/05/15 18:08:20
id:tezcello No.3

回答回数460ベストアンサー獲得回数69ここでベストアンサー

ポイント25pt

phpはShift-JIS での記述は推奨されない様です。

文字化け云々よりも、正規表現系の関数が正常に機能しない可能性が高い(問題なく動作する事もあるが)のは、かなりもったいないのではないでしょうか?


サーバのエンコードに合わせるのが良いと言う記述はよく見かけます。

僕は、xmlを扱う事増えて来たので、スクリプトの先頭で、内部コード・正規表現のコードをUTF-8に、HTTP入出力をpassに、入力クエリのエンコードの自動変換をoffに、を指示してUTF-8で使ってます。もちろんスクリプトの保存はUTF-8です。

(うちのサーバは EUC-JPなので、これらを決まり文句として書いてます。)


携帯用のサイトは出力前に自分でShift-JISにエンコード変換をすればいいでしょうね。EUCやUTFでも問題ないようになって来ているみたいですが。

今時Shift-JISしか理解出来ない(PCの)ブラウザはまず無いので、チャンとヘッダや(x)html内で宣言してあれば文字化け問題は起きないでしょう。

id:sun-chan

ご回答ありがとうございます。

webについては

>> 今時Shift-JISしか理解出来ない(PCの)ブラウザはまず無いので

ということで理解しました。


phpの保存は、

>> phpはShift-JIS での記述は推奨されない様です。

は初めて知りました。ありがとうございます。

>> サーバのエンコードに合わせるのが良いと言う記述はよく見かけます。


というのは、webページの ヘッダーで宣言してある文字コードということでしょうか?

もしくは、別にサーバ全体で何か設定してある文字コードというのがあるのでしょうか?

2007/05/16 08:32:59
id:tezcello No.4

回答回数460ベストアンサー獲得回数69

ポイント25pt

回答受付中でもコメントがつけられるように変更していただけるとありがたいです。(質問者は質問のページ?で設定を変えることができるそうです)


サーバが動いているOSで使用している文字コードの事です。

linuxでしたら、環境変数 LANG に格納されているようです。

php からなら、$_ENV['LANG'] という変数に格納されていると思います。

phpinfo() を実行してみると色々な情報が表示されるので、実行環境を確認するにはいいと思います。(設定されていれば、その表示の中の「Environment」に LANG の値も表示されます。)


ここでいうヘッダは、html 書類の中の head タグの事ではないです。

httpサーバがデータを送り出す際に送ってくるhttpヘッダの事で、php からも header() 関数で制御できます。

もちろんHTML文書として正しくある為に、xml 宣言、html タグ、head タグ内での言語やエンコードの明示は必要でしょうし、これとhttpヘッダも合っているべきですね。(世の中には合っていないサイトも結構あるようです)


また、稀にOSと各サーバ(ソフトウェア)の内部コードが違う場合も有るようです。

  OSはEUC, PHPはUTF... とか

ディストリビュータが用意しているものを使えばその様な変な事にはなら無いとは思いますが。

id:sun-chan

ありがとうございます。

HTTP_ACCEPT_CHARSET Shift_JIS,utf-8;q=0.7,*;q=0.7

HTTP_ACCEPT_LANGUAGE ja,en-us;q=0.7,en;q=0.3

というのはありました。

ちなみに MySQL は euc に設定してあるようでした。

2007/05/16 15:30:51
  • id:tezcello
    それらの値は、ブラウザが Web サーバに送った値だと思います。
    もっとずっと終りの方に「Environment」という項目が無いですか?
    そこに環境変数の一覧が出ているはずです。
    殆どの Linux では LANG の値は ja_JP.eucJP になっているのではと思います。
    (この例は、EUC-JPが日本語の文字コードです)

    MySQL を利用するのであれば、EUC に統一するのがいいかも知れませんね。

    「mbstring」の項目に、内部コード(mbstring.internal_encoding)が表示されていると思います。多分これも「EUC-JP」となっていると思いますが、確認だけは必要でしょう。(スクリプト内で変更可能なので大問題では無いですが)
  • id:sun-chan
    上に書いた

    HTTP_ACCEPT_CHARSET Shift_JIS,utf-8;q=0.7,*;q=0.7
    HTTP_ACCEPT_LANGUAGE ja,en-us;q=0.7,en;q=0.3

    も、Environment の中にありました。

    そのほかに Environment という項目はないですね・・・

    PHP Variablesという項目の中に _ENVというリストはあります。
    _ENV["HTTP_ACCEPT_CHARSET"] Shift_JIS,utf-8;q=0.7,*;q=0.7
    _ENV["HTTP_ACCEPT_LANGUAGE"] ja,en-us;q=0.7,en;q=0.3
    というのはその項目の中にありました。

    mbstringの Japanese support は enabled になってます。
    mbstring.internal_encodingはEUC-JPになっていました。

    LANGという項目は出てないですね…
  • id:tezcello
    環境変数には定義されていないのかも知れませんね。
    イントラサーバ(Vine4.1, php5.1) では定義されていましたが、自宅のMac は定義されていない様です。
    表示の状態もバージョンやディストリビューションによって異なるかも知れません。

    php も MySQL もEUC のようなので、EUC で記述するのでよいかと思います。
  • id:sun-chan
    tezcelloさん、ありがとうございます。

    既にかなり書いているので、eucに直すのがめんどくさい
    ですが・・・がんばってみます。ふぅ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません