サーバによって文字コードなどの扱いが異なり
コードの中で特に文字コードなどの処理をしていないと
文字化けや異なる挙動をとることがあるかと思いますが
htaccessを変更したりサーバの設定を触れない時に
どのように対処すればよいのでしょうか?
実際に使われている文字コードの変換プログラム
(mbstringなどの単体の紹介はいりません)
の実例があれば教えてください。
(phpの先頭にこれを足すだけで文字コードは気にしなくてOKみたいなのがあれば、それを出してくれたかたにポイントを大量に出したいと思います)
print '<head>';
print '<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">';
...
のようにして文字コードを指定すれば解決するのではないでしょうか。
参考サイト
header("Content-type: text/html; charset=Shift_JIS") ;
"Shift_JIS" のところは実際に使う文字コードに。
HTML出力を行う前、とりあえず先頭でもかまいません。
headerの方で先に投げておくということですね。
こちらも参考にさせていただきます。
サーバによってはあらかじめ出力する文字コードが設定されている場合は確かにあるので、PHP ファイル内で最初に header 関数を使って出力時の文字コードを強制的に指定するようにしてます。以下は UTF-8 で出力する場合です。
header('content-type:text/html;charset=UTF-8');
データベースなどと連携する場合はもちろん文字コードを統一する必要はありますし、メール送信機能がある場合なども気をつける必要があるので一概に「これを足すだけで文字コードは気にしなくてOK」とはなりませんが。
ありがとうございます。
これは例えばファイルそのものはS-JISでも
headerで指定してやればUTF-8での出力になる
と考えてもよいものなのでしょうか。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<!--京-->
¥(半角)を突っ込む
Print(表示)系です。
処理系は不明(滅多にというか日本語使わなかったかな?っとね。
ありがとうございます。
参考にさせていただきます。
これは例えばファイルそのものはS-JISでも
headerで指定してやればUTF-8での出力になる
と考えてもよいものなのでしょうか。
違います。
header('content-type:text/html;charset=UTF-8');
header はこれから UTF-8 で送りますよ、と宣言しているだけです。
で、それを信じたブラウザが実際には Shift_JIS を送られたというウソに気づかずに UTF-8 のつもりで表示するために文字化けするわけです。
出力のほうを変えようと思ったら mb_convert_encoding などを使うなどして変換しなければなりません。
サーバーでの仕様を自動で取得するようにして
それをもとにencodingで自動変換して出力するようにした方がよさそうですね。
ありがとうございます。
参考にさせていただきます。
ヘッダやメタで出すのは仕様からいっても当然なので、それ以外にやっている事を...
サーバや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);
||<
なるほど。
そういった形での対処もありますね。
ありがとうございます。
基本的なことですが
ついつい抜けている部分もありますね。
基本を確認するという基本も忘れないようにしないといけないですね。
ありがとうございます。
ありがとうございます。
これを足しただけでは解決しないこともありますが
一応、参考にさせていただきます。