[PHP-users 35535] HTTPエコーする場合に不明な文字(?)が付く現象への対策

kikikwan @ mail.goo.ne.jp kikikwan @ mail.goo.ne.jp
2011年 4月 11日 (月) 16:53:32 JST


phpバージョン 5.2.4

(phpinfoから抜粋)
mbstring.detect_order no value 
mbstring.encoding_translation Off  
mbstring.func_overload 0 
mbstring.http_input pass  
mbstring.http_output UTF-8  
mbstring.internal_encoding ISO-8859-1  
mbstring.language neutral 
mbstring.strict_detection Off  
mbstring.substitute_character 

「現象」
(1)   phpからHTMLを出力したとき、目視で画面上部にすきまができたように見える。

(2)   このとき、ブラウザで「ソースを出力」しそれをエディタに出力すると
本来なら、<!DOCTYPE     >ではじまるはずだが
?????????<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
と、タグの前に不明な文字(?)があります。このときのエディタのエンコードはUTF-8 LFCR。

「調査事項」
(1)  phpの関数で、出力する文字列のうち一番最初の文字を調べたところ「<」でした。

(2)  現象(2)のファイルをバイナリエディタでみた場合、ファイルの先頭部分は
--------|-0--1--2--3--4--5--6--7--8--9--A--B--C--D--E--F-|---0123456789ABCDEF
00000000|ef bb bf ef bb bf ef bb bf ef bb bf ef bb bf ef |   ・ソ・ソ・ソ・ソ・ソ・
00000010|bb bf ef bb bf ef bb bf ef bb bf ef bb bf 3c 21 |    ソ・ソ・ソ・ソ・ソ<!
--------|------------------------------------------------|-------------------
となっています。これが何を現わしているのかは不明。

(3)  phpで出力しているHTMLタグを含んだ同じ文字列を、phpを使用せず*.htmlとしてwebサーバに
置きブラウズすると現象(1),(2)は発生しません。

「希望する結果」
<!DOCTYPE         >
<html>
<head>
</head>
<body>
</body>
</html>
と、一般的なタグのみを出力したい。
タグの前に不明ななにか(文字?制御文字?)を出力したくない。

「予想」
現象(1)の原因は、タグの前にこのなにかが出力されていることが原因ではないか?

「疑問、不明箇所、質問」
・まずは現象(1)の回避をしたいがどうしたらいいか?
・現象(2)にある不明文字はなにか?

現状の問題について、環境など不足情報がありましたらご指摘ください。

解決方法をご存じのかた、よろしくお願いいたします。

山下




PHP-users メーリングリストの案内