Set HTTP antet pentru UTF-8 folosind PHP

Am mai multe PHP pagini ecou diverse lucruri în HTML pagini cu următorul cod.

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

Cu toate acestea, atunci când am valida folosind W3C validator acesta este dotat cu:

codificarea caracterelor specificată în antet HTTP (iso-8859-1) este diferit de valoarea în <meta> element (utf-8).

Eu sunt destul de nou pentru PHP, și mă întrebam dacă am putea și ar trebui să modificați antetul pentru fișierele PHP pentru a se potrivi fișierele HTML.

Soluția

Folosi antet pentru a modifica antetul HTTP:

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

Notă pentru a apela această funcție înainte de orice ieșire a fost trimis la client. În caz contrar antet a fost trimis prea evident, nu poate schimba asta. Puteți verifica asta cu headers_sent. Vezi manual pagina de antet pentru mai multe informații.

Comentarii (6)

În primul rând asigurați-vă că fișierele PHP înșiși sunt UTF-8 codificate.

Meta-tag-ul este ignorat de unele browser-ul. Dacă utilizați numai ASCII caractere, nu't contează oricum.

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

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

Aceasta este o problemă cu serverul web trimite un antet HTTP care nu se potrivește cu cea pe care o definiți. Pentru instrucțiuni privind modul de a face serverul trimite corecte cap, a se vedea această pagină.

În caz contrar, puteți utiliza, de asemenea, PHP pentru a modifica antetele, dar acest lucru trebuie să fie făcut before scoate orice text folosind acest cod:

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

Mai multe informații cu privire la modul de a trimite antete folosind PHP pot fi găsite în documentația pentru funcția header]2.

Comentarii (0)

Puteți folosi, de asemenea, o cale mai scurtă:

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

A se vedea RFC 2616. L's valabile pentru a specifica doar set de caractere.

Comentarii (3)

Pentru o aplicare corectă, aveți nevoie pentru a schimba o serie de lucruri.

Baza de date (imediat după conectare):

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
Comentarii (4)

PHP trimite anteturile automat dacă setați pentru a utiliza codarea internă:

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