人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP fopen(url,"a")の質問です。
簡単なアクセス解析を作っています。アクセスされると 20100617.dat のような日付とリンクした名前のファイルが作られ、記録されます。
サイト自体の文字コードを UTF-8N で作成している関係で、上記の 20100617.dat も UTF-8N で作られることを期待していますが、記録された文字の中に2バイト文字が含まれていないと、エディタなどで開く時に SJIS になってしまうことが多いと思います。mb_detect_encoding 等の関数もありますが、バグがあるとかで、正常動作が期待できないようです。

そこで、fopen 時に文字コードを指定する方法、または作成されたファイルをプログラム上で UTF-8N 保存する方法をご教授下さい。

●質問者: AKI-NAMI
●カテゴリ:ウェブ制作
✍キーワード:DAT PHP SJIS URL UTF-8
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● niwa-mikiho
●100ポイント

UTF8 は ASCII と互換があるため、半角英数文字だけでは UTF8 と認識できないのが普通の動作です。

ASCII のみのファイルにマルチバイト文字を追加で出力すれば、エディタは勝手に UTF8 と認識されます。



ただ短すぎる文字列では検出失敗するので、十数文字ぐらいは出力してあげた方がいいかも知れません。



PHP は OPEN 時に文字コードを指定できないので、読み取り後に

mb_convert_encoding で変換してください。


2 ● hanako393
●0ポイント

全角空白文字も出力しておけばOKです。

◎質問者からの返答

この質問の趣旨とは違う、と思います。(素人なので、回答の内容を性格に把握してないかもしれません)


3 ● ホーエンハイム
●100ポイント ベストアンサー

回答拒否設定の件、ご対応をありがとうございます。

コメントでいただいた質問に対して回答いたします。

2バイト文字がないとエディタで開くと強制的に SJIS となり、確認のしようがありません。

このファイルは UTF-8 ですよ、みたいな検出関数があればいいのですが。

これはエディタ側の問題です。


ファイルの中に半角英数字しかなければASCIIファイルと呼びますが、それはUTF-8(N)とも言えますし、EUC-JPとも言えますし、SJISとも言えます。つまり全角文字のようなマルチバイト文字が加わらない限り、UTF-8(N)/EUC-JP/SJISの識別が発生しないのです。

この状態では、エディタのデフォルト文字コードが何なのかによって、それ以降に入力する全角文字のコードが決まってきます。

PHPのみならず、ASCIIファイルを作成したプログラムで制御できるわけではありません。(純粋なテキストファイルには文字コードを識別するための目印を入れることはできません)


たとえばエディタ「秀丸エディタ」の場合、文字コードの自動判定順位を変更し、UTF-8を最上位にすれば、ASCIIファイルもUTF-8ファイルとして認識されるようになります。

◎質問者からの返答

文字コードについて知識がなかったのでこのような質問になってしまったのですね。

半角英数字にも文字コードがあると思っていました。

とても勉強になりました。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ