web-dev-qa-db-ja.com

charset = iso-8859-2 WebページがUTF-8ヘッダーで表示-アクセント付き文字の代わりに疑問符(�)

Webサーバーの管理に関する質問があります。このWebサイトの場合: http://www.mirkaphoto.hu/ すべてのPHP生成されたページには次の行が含まれています:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

しかし、これはおそらくphp-Apache処理によって無視され、ページはUTF-8ヘッダー付きのブラウザーで表示されます。その結果、疑問符(�)がアクセント付き文字(éáöőóüűúí)の代わりにページテキストに表示されます。私はこれをFirefox、IE、ChromeおよびSeamonkeyでテストしました。

この現象で最も奇妙なのは、サーバーを7.0WheezyからDebian8.0 Jessieにアップグレードした後、この症状が昨日だけ始まったことです。アップグレード中に、Apache、phpなどを含む他のすべてのパッケージもアップグレードし、構成ファイルを工場出荷時のデフォルトファイルで上書きするために「はい」を選択しました。この後、設定ファイルを微調整して、好きなようにすべてを作成しましたが、これを修正する方法が見つかりませんでした。アップグレード前は、ページは問題なく表示されていました。

これはスクリーンショットです。Firefoxは「charset = iso-8859-2」の定義を認識していますが、UTF-8エンコーディングでページを表示していることがわかります。

screen shot

これはサーバー構成の問題であると思われますが、アップグレードによって処理コンポーネントの一部(Apache、php)が変更され、この奇妙な動作が発生した可能性もあります。問題は、この問題の原因を特定できないことです。

誰かがこの謎を解くことができますか?ページの処理中に何がうまくいかない可能性がありますか?

1
giny8i8

サーバーのHTTPヘッダーには

Content-Type: text/html; charset=UTF-8

ファイル内のものよりも信頼できると思われるブラウザはどれか。なぜUTF-8を使用しないのですか?これは、すべてのプラットフォームで確立されたエンコーディングです。

また、HTML宣言の前にガベージテキストがあります。

[M _2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
Daniel B

何度も検索した後、私は適切な解決策を見つけることができました。私を正しい方向に向けてくれて、@ Daniel Bに感謝します。 :)

アップグレードにより、Apache2エンジンは、実際のhtml/phpファイルのContent-Type "text/htmlステートメントを無視して、すべてのUTF-8ファイルを<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />文字セットで処理しているようです。なぜこれが良いことなのかわかりません(できれば説明してください)。それにもかかわらず、疑問符文字(�)を取り除くための解決策は次のとおりでした:

解決策/etc/Apache2/sites-available/MySiteName.confコマンドでサーバー構成を再ロードするよりも、service Apache2 reloadのWebサイトのVirtualHostApache2定義に以下の行を追加しました。この後、ファイルは適切なContent-Type: text/html; charset=iso-8859-2文字エンコードヘッダーで提供されます。

<VirtualHost * >

# [...Some other configurations before this line]

    #To fix encoding problem, that pages display with UTF-8 header though they are created with iso-8859-2 encoding - giny8i8 2015-12-03
    Header set Content-Type "text/html; charset=iso-8859-2"
        # Source:  http://superuser.com/questions/1008480/charset-iso-8859-2-webpage-displays-with-utf-8-header-question-marks-inste/1008482?noredirect=1#comment1397150_1008482

</VirtualHost>

Debian 8.0 Jessieのアップグレード後に同じ問題が発生した場合は、これがうまくいくかどうかをお知らせください。インターネットで検索しましたが、このように綴られていませんでした。したがって、私の回答の投稿。

2
giny8i8

ここに解決策があります:

/etc/httpd/conf/httpd.conf:

# Specify a default charset for all content served; this enables
# interpretation of all content as UTF-8 by default.  To use the
# default browser choice (ISO-8859-1), or to allow the META tags
# in HTML content to override this choice, comment out this
# directive:
#
#AddDefaultCharset UTF-8
1
marcin

Giny8i8で説明されているソリューションは機能します。ただし、何らかの理由でその文字セットにエラーメッセージを表示する場合は、次を使用する必要があります。

ヘッダーは常にContent-Type "text/html; charset = iso-8859-15"を設定します