PHPでの質問です。

サーバによって文字コードなどの扱いが異なり
コードの中で特に文字コードなどの処理をしていないと
文字化けや異なる挙動をとることがあるかと思いますが
htaccessを変更したりサーバの設定を触れない時に
どのように対処すればよいのでしょうか?
実際に使われている文字コードの変換プログラム
(mbstringなどの単体の紹介はいりません)
の実例があれば教えてください。
(phpの先頭にこれを足すだけで文字コードは気にしなくてOKみたいなのがあれば、それを出してくれたかたにポイントを大量に出したいと思います)

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

回答7件)

id:YasuyukiMiura No.1

回答回数33ベストアンサー獲得回数7

ポイント29pt

print '<head>';

print '<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">';

...

のようにして文字コードを指定すれば解決するのではないでしょうか。


参考サイト

http://www.mozilla.gr.jp/standards/webtips0022.html

http://www.asahi-net.or.jp/~ax2s-kmtn/ref/html/hp9.html

id:quocard

ありがとうございます。

これを足しただけでは解決しないこともありますが

一応、参考にさせていただきます。

2007/01/13 18:25:20
id:GEN111 No.2

回答回数472ベストアンサー獲得回数58

ポイント27pt
header("Content-type: text/html; charset=Shift_JIS") ;

"Shift_JIS" のところは実際に使う文字コードに。

HTML出力を行う前、とりあえず先頭でもかまいません。

id:quocard

headerの方で先に投げておくということですね。

こちらも参考にさせていただきます。

2007/01/13 18:25:49
id:okuryu No.3

回答回数72ベストアンサー獲得回数3

ポイント27pt

サーバによってはあらかじめ出力する文字コードが設定されている場合は確かにあるので、PHP ファイル内で最初に header 関数を使って出力時の文字コードを強制的に指定するようにしてます。以下は UTF-8 で出力する場合です。

header('content-type:text/html;charset=UTF-8');

データベースなどと連携する場合はもちろん文字コードを統一する必要はありますし、メール送信機能がある場合なども気をつける必要があるので一概に「これを足すだけで文字コードは気にしなくてOK」とはなりませんが。

id:quocard

ありがとうございます。

これは例えばファイルそのものはS-JISでも

headerで指定してやればUTF-8での出力になる

と考えてもよいものなのでしょうか。

2007/01/13 18:26:44
id:fuk00346jp No.4

回答回数1141ベストアンサー獲得回数54

ポイント27pt
  • 文字化け対策の基本中の基本

メタタグによる文字コード指定の有効性

  • Yahooで使われている強制例

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<!--京-->

¥(半角)を突っ込む


Print(表示)系です。

処理系は不明(滅多にというか日本語使わなかったかな?っとね。

id:quocard

ありがとうございます。

参考にさせていただきます。

2007/01/13 18:27:13
id:GEN111 No.5

回答回数472ベストアンサー獲得回数58

ポイント28pt

これは例えばファイルそのものはS-JISでも

headerで指定してやればUTF-8での出力になる

と考えてもよいものなのでしょうか。

 違います。

header('content-type:text/html;charset=UTF-8');

 header はこれから UTF-8 で送りますよ、と宣言しているだけです。

 で、それを信じたブラウザが実際には Shift_JIS を送られたというウソに気づかずに UTF-8 のつもりで表示するために文字化けするわけです。

 出力のほうを変えようと思ったら mb_convert_encoding などを使うなどして変換しなければなりません。

id:quocard

サーバーでの仕様を自動で取得するようにして

それをもとにencodingで自動変換して出力するようにした方がよさそうですね。

ありがとうございます。

参考にさせていただきます。

2007/01/16 00:08:41
id:tezcello No.6

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

ポイント30pt

ヘッダやメタで出すのは仕様からいっても当然なので、それ以外にやっている事を...

サーバやPHPのコンパイル時の指定等が思惑と違う場合は、SITE_CHARSET, SITE_LANG にそれぞれ値を入れておいて(別に直接書いてもいいのだけれど、ヘッダを出す時などにも使うので define してます)こんな感じで指定してます。

php.ini に記述出来れば楽なんですけどね。

ただ、mb_http_input は、pnp.ini にしか記述出来ないので入力を処理する度毎に mb_convert_encoding で合わせてます。

>||

set_magic_quotes_runtime(false);

mb_http_output("pass");

mb_internal_encoding(SITE_CHARSET);

mb_language(SITE_LANG);

mb_regex_encoding(SITE_CHARSET);

||<

id:quocard

なるほど。

そういった形での対処もありますね。

ありがとうございます。

2007/01/19 13:13:40
id:elf No.7

回答回数76ベストアンサー獲得回数8

ポイント27pt
  • スクリプトをShift_JISで書かない
    • マニュアルにも書かれていますが,PHPをShift_JISで記述することは公式に推奨されていません
  • 文字エンコードを自分で確実に制御する
    • mbstringの自動文字エンコード変換を使用しない.特にmbstring.http_input,mbstring.http_outputまわり.
    • PHPスクリプトの文字エンコードと内部処理的文字エンコードを固定する
    • データの各入出力関連を抽象化ライブラリにし,そこでPHPスクリプトの内部処理エンコードの変換を検討する.例えばこの辺をきっちり作りこめばPHPスクリプトとデータの文字エンコードをそろえる必要は基本的に一切ありません
      • DB内データ<=>PHPスクリプト(ここは可能な限りそろえるほうが好ましい)
      • HTML<=>PHPスクリプト
      • 通常のファイル<=>PHPスクリプト
      • ウェブや他のサーバーとのデータの入出力(XMLなど)<=>PHPスクリプト
id:quocard

基本的なことですが

ついつい抜けている部分もありますね。

基本を確認するという基本も忘れないようにしないといけないですね。

ありがとうございます。

2007/01/19 13:14:32

コメントはまだありません

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

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

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

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