web-dev-qa-db-ja.com

を使ってHTTPヘッダをUTF-8に設定する PHP

以下のコードを使って、さまざまなことを _ html _ ページにまとめた、いくつかの _ php _ ページがあります。

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

しかし、 W3Cバリデーター を使って検証すると次のようになります。

HTTPヘッダー(iso-8859-1)に指定されている文字エンコードが、要素(utf-8)の値と異なります。

私はPHPが初めてなので、PHPファイルのヘッダーをHTMLファイルと一致するように変更できるかどうかを考えました。

297
manycheese

HTTPヘッダーを変更するには header を使用します。

header('Content-Type: text/html; charset=utf-8');

出力がクライアントに送信される前にこの関数を呼び出すことに注意してください。それ以外の場合は、ヘッダーも送信されているため、これ以上変更できません。これは headers_sent で確認できます。詳しくは headerのマニュアルページ を参照してください。

855
Gumbo

まずPHPファイル自体が UTF-8 encodedであることを確認してください。

メタタグは一部のブラウザでは無視されます。あなたがASCII文字だけを使うのであれば、とにかく関係ありません。

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

header('Content-Type: text/html; charset=utf-8');
32
KingCrunch

これはあなたのWebサーバがあなたが定義したものと一致しないHTTPヘッダを送信することに関する問題です。サーバに正しいヘッダを送信させる方法については このページ を参照してください。

そうでなければ、ヘッダを変更するためにPHPを使うこともできますが、これは の前に このコードを使ってテキストを出力する必要があります:

header('Content-Type: text/html; charset=utf-8');

PHPを使用してヘッダを送信する方法についての詳細は/ ヘッダ関数のドキュメント にあります。

15
EdoDodo

もっと短い方法でも使えます。

<?php header('Content-Type: charset=utf-8'); ?>

RFC 2616を参照してください charsetだけを指定することは有効です。

11
Jason OOO

正しく実装するためには、一連のことを変更する必要があります。

データベース(接続直後):

mysql_query("SET NAMES utf8");
//Meta tag HTML.(probably its already set): 
meta charset="utf-8"
header php.(before any output of the HTML):
header('Content-Type: text/html; charset=utf-8')
table-rows-charset(for each row):
utf8_unicode_ci
8
UnChien Andalou

内部エンコーディングを設定するとPHPは自動的にヘッダを送信します

ini_set('default_charset', 'utf-8');
5
Nikl