ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Let's PHPコミュのsessionを利用するとHtmlにゴミが入る

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんばんは。
さらっと過去のトピックを探しても参考になりそうなものが見つからなかったので、思い切って質問させていただきます(>_<、)

Apache2.0.58 + PHP4.4.2
on WinXP Pro SP2
という環境を構築し、IE6とFirefox1.5.0.4で動作を確認しています。

とあるPHP(仮にPHP A)にアクセスし、事前にログイン処理が行われていなければログイン用PHP(仮にPHP B)へheader()を使ってページ遷移。
ログインが完了すれば元のPHP Aに戻る、という処理を作ろうとしています。

しかし、ログインを完了していざPHP Aに戻るとIEでアクセスした場合にのみHTMLソース<!DOCTYPE>の前に変な文字が入ってしまい、ページの最上部が1行改行されデザインが崩れてしまいます。

具体的にどのようなゴミが入るのかと言いますと、PHP・HTMLソースは共にUTF-8で記述し、php.iniの文字コード関係は
output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8
;mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none;
と設定してあります。
このような環境下で、「・ソ」と表示されるのです;;

色々格闘した結果、session_start()を削るとゴミが出なくなったので、原因はセッション周りかなぁと踏んでいる次第です。
また、こちらもIEでのみ再現できる問題なのですが、前述のログイン用PHP Bでもheader()で遷移した初回はいいのですが、そこから入力エラー等でPHP Bの画面を再出力させると、PHP Aと同様にゴミ混じりの崩れが発生します…orz

どうか皆様のお知恵を拝借させていただけないでしょうか…(半泣)
よろしくお願いします。。。

コメント(9)

>へむーさん
レスありがとうございます。
;default_charset = "iso-8859-1"となっていたので試しにUTF-8に変更してみましたが、状況は変わりませんでした('A`;)
勘なので、確証はありませんが、もしかしてUTF-8をBOMありで保存してませんか?

もしそうならBOM無しで保存してみると良いかもしれません。

BOM無し対応エディタは、個人的にはJmEditやUnEditorあたりがオススメです。
ここにも同じことが書いてありますねhttp://jp2.php.net/function.session-start#68084

んで、同じ現象と仮定して
http://en.wikipedia.org/wiki/Byte_Order_Mark
を見ると FF EFで始まるのはUTF-16 Little Endian

http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm
に日本語で解説が。

ここらへん詳しくないのであれですが、ざっと見、utf-8以外のunicodeで保存されてるとか?

検討違いだったらごめんなさい。
もうちょっと調べたいところですが。。。寝ます zzz
>悠世さん
う〜ん、ご紹介頂いたUnEditorを試してみましたが、どうやらちゃんとBOM無しUTF-8で保存されているようです。
参考までに、普段利用しているエディタは「サクラエディタ」です。

>SuperMixierさん
英文からも大凡は伝わって来ますね…
前述の通り、UTF-8BOMなし(UTF-8N?)で保存されているので文字コード系のトラブルではないようですTT

む〜ん…そろそろ僕自身も睡魔が…
問題を絞り込んでいく必要がありますね。
ソースの最初に変な文字が出るという事は、ヘッダに変な文字が含まれているような気がします。
セッションが原因ならSet-Cookieヘッダが怪しいかも。

FireFoxなどが入れてあれば、一度ヘッダを確認してみて下さい。
IEならieHTTPHeaders というソフトを僕は使っています。
;mbstring.encoding_translation = Off

↑がコメントされているのは意図的なんでしょうか?
UTF-8Nで保存されているなら、PHPのコードの最終行に
余計な改行がありませんか?

<?php



?>
[EOF] //←空白行
パケットモニタで生データを確認するのはいかがでしょう。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Let's PHP 更新情報

Let's PHPのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング