チョコミントアイス

PHP初心者です。
不思議な現象を経験したため質問させていただきます。
ファイルから文字列を読むとき、どうしても先頭に「見えない」文字がついてしまいます。見えない文字とは空白ではなく容積ゼロの文字のことで一種の文字化けと思われます。

<PHPプログラム>
<?php
header('Content-Type: text/html; charset=UTF-8');
header('Content-Language: ja');
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
print "ここに発生→";
if($fp = @fopen("file.txt", "r")){
while( !feof($fp) ){
$line = trim(fgets($fp));
print "$line";
}
@fclose($fp);
}
?>

<データファイルfile.txt の中身>
←ここ!1行目
2行目
3行目

<出力結果>
ここに発生→←ここ!1行目2行目3行目

出力結果にカーソルを持って行き、矢印キーで動かしていただければ → と ← の間でカーソルが1回動かず、何かが「存在」していることが確認できると思います。
このような文字は初めての経験でわけがわかりません。予防策がありましたらお願いいたします。

<環境>
レンタルサーバーはPHP4.4.4(UTF-8)
ローカルはWin-XP(3台で確認)
プログラムもデータファイルもUTF-8で書いています。
<ほか>
その文字自体をここに載せようとしましたが「」に変換されてしまいました。これは一体何でしょう??

A 回答 (1件)

65279を十六進表記すると 0xfeff なのでBOMですね。


ということで、php utf-8 bom で検索してみると以下のページが
トップに引っかかりました

The elephant vanishes PHP
http://oubakiou.blog8.fc2.com/blog-category-17.h …

> それで色々調べてみると、これはPHPのバグらしい。
>
> Bug #22108 php doesn't ignore the utf-8 BOM
http://bugs.php.net/bug.php?id=22108
>
> 対象OSは全て、対象のPHPバージョンは全て、StatusはWont fix。

PHPスクリプトを編集するのに使っているエディタの設定をいじって、
BOMをつけないようにすればよいようです。
    • good
    • 0
この回答へのお礼

なるほど!!PHPのバグとは!!ヾ(iДi)/

http://sakaguch.com/utf1.html
によると、
「保存はBOMなしのUTF-8Nにしなければなりません。」
とあり、単なるUTF-8じゃいかんようです。

実際UTF-8Nで検証したところ「見えない文字は」発生しませんでした。
誠にありがとうございました。

お礼日時:2007/07/21 00:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!