サイトの転送を扱っていますが、その過程で文字セットが汚れてしまいました。最初に、すべてのファイルを変更せずに転送したところ、新しいサーバー上のファイルには<?>
特殊文字のアイコンが表示されました。ブラウザの文字エンコーディング (Chrome と FF) を一目見ただけで、UTF-8 を自動検出していることがわかりました。ページのメタ文字セットは ISO-8859-1 に設定されています。コピーは、複数のデータベースのさまざまなテーブルから取得されます (質問しないでください)。
元のサイトでは、すべて正常に表示されました。新しいサイトで、<?>
... 掘り下げてみると、php.ini にデフォルトの charset ="UTF-8" が見つかり、何も設定しませんでした。現在、サイトのほとんどのページは正常に表示され、ブラウザはメタ文字セット タグを認識しており、誰もが満足しています。つまり、ルート外のフォルダーに移動するまでです。
このフォルダー内のファイルは、メタ文字セットが ISO-8859-1 ですが、ブラウザーに UTF-8 として読み取るように指示しています。これは<?>
、これらのページで表示されていることを意味します。ブラウザーを ISO-8859-1 として読み取るように設定すると、問題なく表示されます。自動検出により、UTF-8 にリセットされます。何か案は?
ありがとうございました!
更新(以下のコメントから追加):
martinstoeckli の推奨に従ってW3C チェッカーを使用してページを実行したところContent-Type: text/html; charset=utf-8
、メタ タグが<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
であるときに HTTP コンテンツ タイプが であることがわかり、競合する文字エンコーディング宣言エラーが発生します。クレイジーなことに、UTF-8 宣言がどこから来ているのか、一生わからないのです! どのファイルにもありません。すべてのファイルは BOM なしで UTF-8 で保存されています。php.ini はデフォルトを宣言しないように設定されており、フォルダーの .htaccess は PatomaS が示唆するように設定されています。
(価値があるのは、Mozilla の Web Sniffer が HTTP ヘッダーの Content-Type を確認することですtext/html; charset=utf-8
。)
更新: 私が提起したこの問題の解決には至りませんでしたが、文字エンコーディングの問題を解決する最善の方法は、UTF-8 エンコーディングを使用するようにすべてをリファクタリングすることであると判断しました。もちろん、これはおそらく、「なぜ utf8-encode() が私の łâùñdrÿ を実行しないのですか?」のような、よりエキサイティングな初心者の質問で私を見ることになることを意味します。
もちろん、それは謎が残っていることを意味します: すべてが異なって設定されているように見えるときに、サーバーが UTF-8 の HTTP Content-type charset ヘッダーを送信する原因は何ですか?