単純な PHP ページのテキストが、HTTP 経由でアクセスするときれいに見えるのに、HTTPS 経由でアクセスすると歪む理由を理解するのに苦労しています。
ページにはギリシャ語のテキストが含まれ、ファイルのエンコードは UTF-8 で、HTML ヘッダー内に content メタ タグがあります。
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
これの原因は何ですか?
HTTP と HTTPS は通常、Web ページの文字エンコーディングには影響しません。HTTPS はソケット接続を暗号化するだけで、それ以上のことはありません。バイトは Web サーバーから Web ブラウザーにそのまま転送され、暗号化されます。そのため、HTTPS と HTTP で Web ページのレンダリングが異なる場合、Web サーバーは各プロトコルで異なるデータを送信しています。
あなたの特定の状況では、実際にそうです。HTTP では、Web サーバーは UTF-8 でエンコードされた HTML と、文字セットが指定されていない HTTP ヘッダーを送信します。これにより、Web ブラウザーは HTML のタグContent-Type: text/html
で指定された UTF-8 文字セットを使用できるようになります。meta
ただし、HTTPS では、Web サーバーは代わりに UTF-8 でエンコードされた HTML と HTTPContent-Type: text/html; charset=iso-8859-15
ヘッダーを送信しています。HTTP ヘッダーが優先されるため、HTTP ヘッダーの文字セットは、HTML のmeta
タグの UTF-8 文字セットをオーバーライドします。HTTPS 配信のContent-Type
文字セットを無視し、HTML を強制的に UTF-8 として解釈するよう Web ブラウザーに指示すると、HTTP 配信の Web ページと同じようにレンダリングされます。したがって、問題は、Web サーバーがContent-Type
HTTP ではなく HTTPS のヘッダーで誤った文字セットを送信していることです。どちらの場合も、HTML 自体は問題ありません。そのため、Web サーバーが正しく構成されていないか、HTTPS 経由でデータを送信するときに PHP スクリプトに文字セットのバグがあります。