知人に頼まれて News 表示プログラムの修正。
サーバーを変更しただけなのになぜかIEのみ表示されないとのこと。
IE。。。嫌いなんだよね。
現象
非同期でテキストファイルを読み込みWebページに表示させる処理の際、InternetExproler のみ以下のエラーが発生する。
エラー c00ce56e のため操作を完了できませんでした
なんだろぅ?
原因
XMLHttpRequest とレスポンスの文字コードが違う場合にエラーが起きる。
プログラムファイルも読み込むテキストファイルも UTF-8。
しかしテキストファイルはheaderを送信していないため文字コードを判別できないみたい。
ならば教えて上げようじゃないか。
解決方法
以下の方法で文字コードを指定する。
1, 読み込むファイルが PHP の場合
2, php.ini で設定する場合
default_charset = "utf-8"
3, .htaccess で php.ini の設定を書き換える場合
php_value default_charset utf-8
これでもダメなら .htaccess に以下を記述。
AddType text/plain;charset=UTF-8 .txt
これでOK。
まとめ
サーバーを変えた際にこの現象が起こったってことは、前サーバーではデフォルトの php.ini で文字コードを指定していたんだと思う。
新サーバーでは no value だったということ。
IE 以外のブラウザはこのあたり柔軟に対応してる。
IE は頑固というか実直というか。
ちょっと好きになれそう。