忍者ブログ

カウンター

プロモーション

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


  • 2024/05/01 19:19

PHP エディタx入力x内部解釈x出力xブラウザ(文字コード見直し)

PHP の調べ物

 PHPエディタ(php_editor と、php_editor_std) なるものと、Notepad++ EUC-JP 対応版 なるものを、
当初からPHP エディタのターゲット として使おうとしてきた。

 結局なんだか普通にエディタっぽいNotepad++ EUC-JP 対応版 を使ってきたのだが、
PHPエディタ の通常版がプロジェクト単位で使えるのもあり、そのうちこちらにした方が良いかな?
とか思いつつ、通常版は拡張子の関連付けからなんだかややこしく、プロジェクトに参加させないファイルは
開くことが出来ない気配・・・

 なので一度は簡易版みたいなスタンドあローン版があり、こちらはファイルだけを開けるので
学習用には楽だが、なんだか両方使わないといけないっていう気配に陥りそうで、ぶっちゃけややこしい・・・
Windows に拡張子の関連付けを行うと、それぞれかぶらない様に設定されてしまうのがわかったので、
この際通常のプロジェクト単位のバージョンの方に.php なども設定しなおしてみて開いてみると、
「作成するファイル名を指定してください」 と出て、その拡張子に関連付けしたファイル名は表示されるが
そのプロジェクトに参加させてみると、ファイルは中身が「空」の物、つまり新規になってしまう。

 この都合の悪さは痛い^^; 
プロジェクト単位でしか作業をしなくても、ファイル単位で使えない→通常版
プロジェクトで作業出来ないが結構いけるのかな?って思った→スタンドアローン版

で結局前もこのPHPエディタなる物はphp.exe でエラーチェック が出来るとかchmコンパイルされた
PHP マニュアルが見れる(これはエラーの詳細でジャンプできないから便利でない)とかも使えるので
使おうと思って、度々この通常かスタンドアローンか迷い、Notepad++ EUC-JP 対応版 を使ってる
始末なのだった・・・・・

 それで長くなるが今回やっとまた、PHP エディタを使おうと思い、PHP のテストなどでお決まりの
雛形があるので、その雛形を私は雛形.php って名前でつけてるのだが、これをスタンドアローンで
開いて拡張子に驚きました・・・

 その拡張子の問題について述べます。まずはそのファイルの内容です。
--------------------
<html>
<head><title></title></head>
<body>
<?php

?>
</body>
</html>
--------------------
たったこれだけ、これだけがどうもマズイみたいなのです^^;;;

これをメモ帳で開き、名前を付けて保存にすると、文字コード は「ANSI」なのです。
でもこれを、PHPエディタ のスタンドアローン版で開くと、何度 Shift-JIS で保存しても、
再度開くと「UTF-8」なのです^^;

でもなぜか、こっちのコードの例だと、Shift-JIS として認識してくれます^^;
--------------------
<html>
<head><title></title></head>
<body>
<?php
//テスト
?>
</body>
</html>
--------------------
開く時にどっちかわからないなら、Shift-JIS を選ぶかUTF-8 を選ぶか選択する様な設定が無いです><;

このPHPエディタスタンドアローン版(Ver.1.33)は、ぶっちゃけ気が付かないと、初心者は文字コード で
ハマるかもしれません。。。

 後で分かったのですが、これはNotepad++ EUC-JP 対応版 でも同様な状況な様です!!!
 なぜ気が付かなかったのかは、Notepad++ EUC-JP 対応版 の場合は、
複数同時に沢山のファイルが開けて、そのままNotepad++ EUC-JP 対応版 本体を閉じて終了しても、
次開くと、指定したファイル を閉じてない限り、セーブしてもまた開きます。
 つまり、形式変換してセーブして閉じなければ、またShift-JIS から使えて、
設定が残るのです。
 個人的には便利に思えました、しかしこれもShift-JIS 優先とかの設定があればいいですね^^;

 とりあえず、なんだか、色々エディターの問題でつまずいて、
私は、PHP エディターなる物のデフォルトがUTF-8形式であると誤解していて
これがPHP でデフォルトで扱うと便利なのかな? とか思っていましたが、
他のエディタ、Notepad++ EUC-JP 対応版 でも同様なので、これは多分デフォルトではないと
思えました。

 とりあえずは、凄い慣れない疑問でしたが、なんとなく普通は
「日本語が混ざっていないANSI は、UTF-8 であり、日本語が混ざるとANSI であってもそれは、
S-JIS(Shift-JIS)である?!ことを薄々理解しました、多分それであってるのかな???????
 
 また言い換えると、普通にメモ帳では ANSI という取り扱いしかないのに対し、
PHP エディタ や、Notepad++ EUC-JP で自動的にファイルを開いた時に認識する文字コードが違う事も
判り、あぁそういえば、PHP の設定ではAuto とか設定があるから、これがバグの原因になるのも
よく似た事なのか!と実感しましたorz


 今までとりあえずS-JIS(Shift-JIS) を使ってきたのですが、今後の為を考えて色々調べました。
<調べたサイト>
----------------------------------------------------------------------------------

php.iniの文字コードの設定 (設定の組み合わせだけ参考に)

phpiniの文字コードの設定 - [データベース]All About (設定の組み合わせを参考に、他の資料もあるサイト)
PHPの文字化けについて (こうするとこうなると結果だけ書いてある)

PHPの文字化けを本気で解決する - ぎじゅっやさん (PHPに内部エンコードの概念が無いと言っている。内部で処理するときに基本となる文字コードはあるのでは?内部のエンコード指定が固定か固定でないか?を言いたいのかわからないが、ちょっと間違っている気がする。動く組み合わせだけの参考)

XAMPP MySQL (& cakePHP) 文字化け対策: PHPを使ったWebサイト構築 備忘録 (MySQL の設定に関して触れていたので載せてある。メモですがこの例だと「utf8」を選んでいる。)

さぼてん: PHP+MySQL+UTF-8で文字化け対策 (SQLインジェクションに脆弱 とかを参考になりそうだけど、ちょっと私には気が早すぎ。そしてこのサイトの主さんも他のサイトを参考にしている、その説明の説明サイトみたいな感じ。)

文字コードの変換 (PHP で関数の例で文字コードの話、あんまり設定環境や動作環境からの文字化けとは関係無いです^^; 済みません。)

こりゃまたPHP!~PHP概説めにー : こりゃまためんどい文字コード (このサイトも文字コードの細かい詳細は他のサイトへのリンクを基本に話を進めてある。またDBやgoogle やamazon との連携する場合の事も多少書いてある。)

----------------------------------------------------------------------------------


この上記リンクを見て、結局自身のサーバや、レンタルサーバの設定を見てみないと
一番最良の設定が見えてこない事がわかった。

 
そこで、実際に、phpinfo 関数を用いて、自身のPCの設定や、無料HPを調べてみた。

<自分のPCのmbstring.xxx の設定>
Directive Local Value Master Value
mbstring.detect_order SJIS,EUC-JP,JIS,UTF-8,ASCII SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output SJIS SJIS
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding SJIS SJIS
mbstring.language Japanese Japanese
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

<とある無料HPのmbstring.xxx の設定>
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.strict_detection Off Off
mbstring.substitute_character no value no value

ここで、mbstring.http_input がauto となっているのは、
クロスサイトスクリプティング を考えると危険かもって気がついたのは後回しとして^^;;;
とりあえず、サーバによっては設定自体がされていない場合もある事を知った。
そのサーバが設定出来るのかや、固定されているのかによっても扱いが違ったり、
スクリプト内部から初期設定をして使うなどと言う使い方が想像できた。

なので今は、エディタの保存文字コードは特に気にしないで(ちょっと気になる部分はもちろんあるが^^;我慢して)
今後、DBやら、他のサイトの機能を連携させたりする事が出てきた場合に、臨機応変に切り替えるか、
それとも汎用性のある変換ルーチンやクラスライブラリをPHPの関数で作れるのならば、
作れる能力が付いた頃になんとか考えてみようと思いました。

 またちょっと予断ですがDBの文字コードについて、良い例のサイトがあったのでリンクをメモとして残します。
以下リンク。

MySQL - Wikipedia
MySQL5はsjis(Shift JIS)、utf8(UTF-8)、ujis(EUC-JP)など各種文字セットを指定できるとある。

 最後に関係ありませんが、PHP でS-JIS(Shift - JIS) を使い続けるのは文字化けの問題からは
セオリーではないみたいです。PHP ではEUC-JP か、UTF-8 を使うべきだそうです。
データベースと共に用いる場合にはデータベースの文字コードにも考慮しなければいけないので
文字化けを極力防ぐには、PHP やデータベース の内部処理の文字コードに合わせるのが
ブラウザなどを抜いた処理の部分では一番の文字化け対策の様です。

 

 

拍手[0回]

PR


  • 2010/04/04 21:42

コメント一覧

  • お名前
  • Email

  • コメント

  • Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  • パスワード
[PR]