Mengatur header HTTP untuk UTF-8 menggunakan PHP

Saya punya beberapa PHP halaman bergema berbagai hal yang menjadi HTML halaman dengan kode berikut.

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

Namun, ketika saya memvalidasi menggunakan W3C validator ia datang dengan:

pengkodean karakter yang ditentukan dalam header HTTP (iso-8859-1) berbeda dari nilai yang di <meta> elemen (utf-8).

Saya sangat baru untuk PHP, dan aku bertanya-tanya jika saya bisa dan harus mengubah header untuk file PHP untuk mencocokkan file HTML.

Larutan

Gunakan header untuk memodifikasi header HTTP:

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

Catatan untuk memanggil fungsi ini sebelum output telah dikirim ke klien. Jika header sudah dikirim juga dan anda jelas tidak bisa mengubahnya lagi. Anda dapat memeriksa bahwa dengan headers_sent. Lihat halaman manual dari header untuk informasi lebih lanjut.

Komentar (6)

Pertama pastikan file PHP sendiri UTF-8 dikodekan.

Meta tag ini diabaikan oleh beberapa browser. Jika anda hanya menggunakan ASCII-karakter, itu doesn't peduli pula.

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

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

Ini adalah masalah dengan web server mengirimkan HTTP header yang tidak sesuai dengan yang anda tentukan. Untuk petunjuk tentang cara untuk membuat server mengirim header yang benar, lihat halaman ini.

Jika tidak, anda juga dapat menggunakan PHP untuk memodifikasi header, tapi ini harus dilakukan before keluaran teks menggunakan kode ini:

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

Informasi lebih lanjut tentang cara mengirimkan header menggunakan PHP dapat ditemukan di dokumentasi untuk fungsi header.

Komentar (0)

Anda juga dapat menggunakan cara yang lebih pendek:

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

Lihat RFC 2616. It's yang valid untuk menentukan hanya set karakter.

Komentar (3)

Untuk implementasi yang benar, anda perlu untuk mengubah serangkaian hal.

Database (segera setelah koneksi):

mysql_query("SET NAMES utf8");

// Meta tag HTML (probably it's 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
Komentar (4)

PHP mengirimkan header secara otomatis jika diatur untuk penggunaan internal encoding:

ini_set('default_charset', 'utf-8');
Komentar (1)