2013-02-01 13 views
5

Ricevo la bella casella where in cui devono essere visualizzati i caratteri spagnoli. (es: ñ, á, ecc). Ho già fatto in modo che la mia meta http-equiv è impostata su utf-8:I caratteri spagnoli non vengono visualizzati correttamente

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

Ho anche fatto in modo che l'intestazione di pagina è impostato per UTF-8 anche:

header('Content-type: text/html; charset=UTF-8'); 

Qui sono le fasi iniziali del mio codice finora:

<?php 
    setlocale(LC_ALL, 'es_MX'); 
    $datetime = strtotime($event['datetime']); 
    $date = date("M j, Y", $datetime); 
    $day = strftime("%A", $datetime); 
    $time = date("g:i", $datetime); 
?> 
    <a href="/<?= $event['request'] ?>.html"><?= $day ?> <?= $time ?></a> 

Il codice sopra riportato è in una dichiarazione where. Ho letto che anche il cambio delle regole di confronto nel database può essere un fattore, ma l'ho già impostato su UTF-8 General ci. Inoltre, l'unica cosa che è in quella colonna è DateTime comunque che è numeri e non può essere collazionato comunque.

risultato: sbado 8:00

Qualsiasi aiuto è molto apprezzato come sempre.

+0

hai forzato anche la connessione al database php-> mysql come UTF? avere un db e l'output php in UTF è inutile se la connessione php-> mysql è qualcos'altro. la ** ENTIRE ** pipeline di rendering deve avere lo stesso set di caratteri, o unita alla logica di conversione del set di caratteri appropriata ... se c'è una mancata corrispondenza in qualsiasi fase, otterrai caratteri corrotti. –

+0

Is default_charset per php impostato su utf-8? – PoX

+0

Sì, ho impostato anche la connessione a UTF 8 ... mysql_set_charset ('utf8', $ connnection); – NotJay

risposta

6

Le cose da considerare in PHP/MySQL/UTF-8

  • Le tabelle del database e le colonne di testo deve essere impostata su UTF-8
  • pagina HTML Content-Type dovrebbe essere impostato a UTF-8

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

  • PHP deve inviare un colpo di testa informare il browser di aspettarsi UTF-8

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

  • La connessione PHP-MySQL deve essere impostata su UTF-8

    mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);

    mysqli_query("SET CHARACTER_SET_RESULTS='utf8'",$conn);

    mysqli_query("SET CHARACTER_SET_CONNECTION='utf8'",$conn);

  • PHP ini ha default_charset impostazione dovrebbe essere UTF- 8 se non si ha accesso ad esso utilizzare ini_set('default_charset', 'utf-8');

+0

Attenzione: mysqli_query() si aspetta che il parametro 1 sia mysqli, stringa data – NotJay

+0

stai passando $ conn come collegamento db giusto? – PoX

+0

$ conn = mysql_connect ("host", "utente", "pass"); – NotJay

0

è importante verificare che il codice sia anche codificato come UTF-8 (è possibile visualizzare questa proprietà in molti editor di testo e codice).

Poiché esiste un solo simbolo (il quadrato nero), è probabile che si stia utilizzando ISO-8859-1 o ISO-8859-15.

0

Potete vedere che il contenuto è corretto nella tabella del database, guardatelo con phpmyadmin per es. Se lo è, assicurati che i tuoi file php siano codificati utf8, dai un'occhiata alla tua configurazione ide/editor.

4

Ho sofferto di questo problema da molti anni e non riesco a trovare alcuna logica e ho provato tutte le soluzioni di cui sopra.

Una soluzione è creare codici html per tutto il testo. Ecco una funzione che ho usato quando tutto il resto ha fallito.

function span_accent($wordz) 
{ 

$wordz = str_replace("Á","&Aacute;",$wordz); 
$wordz = str_replace("É","&Eacute;",$wordz); 
$wordz = str_replace("Í","&Iacute;",$wordz); 
$wordz = str_replace("Ó","&Oacute;",$wordz); 
$wordz = str_replace("Ú","&Uacute;",$wordz); 
$wordz = str_replace("Ñ","&Ntilde;",$wordz); 
$wordz = str_replace("Ü","&Uuml;",$wordz); 

$wordz = str_replace("á","&aacute;",$wordz); 
$wordz = str_replace("é","&eacute;",$wordz); 
$wordz = str_replace("í","&iacute;",$wordz); 
$wordz = str_replace("ó","&oacute;",$wordz); 
$wordz = str_replace("ú","&uacute;",$wordz); 
$wordz = str_replace("ñ","&ntilde;",$wordz); 
$wordz = str_replace("ü","&uuml;",$wordz); 

$wordz = str_replace("¿","&iquest;",$wordz); 
$wordz = str_replace("¡","&iexcl;",$wordz); 
$wordz = str_replace("€","&euro;",$wordz); 
$wordz = str_replace("«","&laquo;",$wordz); 
$wordz = str_replace("»","&raquo;",$wordz); 
$wordz = str_replace("‹","&lsaquo;",$wordz); 
$wordz = str_replace("›","&rsaquo;",$wordz); 
return $wordz; 
} 
+0

Dovresti essere in grado di usare solo htmlentities: http://php.net/manual/ it/function.htmlentities.php –

2

Si prega di controllare il file CODIFICA. Deve essere in UTF-8 o UTF-8 senza BOM.

Per modificare la codifica del file. Usa Notepad ++ (puoi usare anche un altro editor dove puoi cambiare la codifica dei file). Nella barra dei menu> Scegli CODICE> Scegli qualsiasi UTF-8 o UTF-8 senza BOM.

Vedere il collegamento per la differenza di UTF-8 e UTF-8 senza BOM. What's different between UTF-8 and UTF-8 without BOM?

Spero che possa essere d'aiuto. :)

Problemi correlati