2012-05-26 11 views
7

Sto provando ad echo la data con strftime ma sto ottenendo una codifica errata solo sui caratteri di utf-8. (Caratteri accentati in pratica)Codifica errata durante l'uso su strftime in spagnolo?

setlocale(LC_TIME, 'spanish'); 
define("CHARSET", "iso-8859-1"); 
echo strftime("%A, %d de %B",strtotime($row['Date'])); 

C'è qualche problema in questa parte del codice? Tutto è codificato in utf-8 e facendo eco a un carattere 'á' sopra di esso visualizza correttamente il carattere.

+0

quale errore hai trovato, ho eseguito il codice in tastiera codici e ha trovato niente di inappropriato, me lo faccia sapere WHR u faccia problema http://codepad.org/YWGGJ1tW – swapnesh

+0

Come vedi il risultato? Nel browser? Sei sicuro che il problema sia nel codice e non nel modo in cui vedi l'output? Inoltre, non usare strtotime - la sua pessima pratica, come se fosse una scatola nera, se la data che hai fornito è il 06/07/11 - quale sarebbe il risultato (quale è l'anno, il mese, la data)? – ddinchev

+0

Sto ricevendo un diamante nero con dentro un segno interrogativo. Non posso dirlo con certezza, ma non penso che il problema sia nel modo in cui lo vedo da quando echo "echo" á ".strftime ("% A ", strtotime ($ row ['Date'])); 'mostra correttamente á, ma non stampa correttamente. – lisovaccaro

risposta

17

Prova ad aggiungere utf8_encode()

setlocale(LC_TIME, 'spanish'); 
define("CHARSET", "iso-8859-1"); 
echo utf8_encode(strftime("%A, %d de %B",strtotime($row['Date']))); 
2

forse:

echo iconv("iso-8859-1","utf-8",strftime("%A, %d %B",strtotime($row['Date']))); 
9

io sono un po 'in ritardo, ma Googling in giro ho trovato questo post. E le risposte non erano appropriate nel mio caso. Sto riscontrando lo stesso problema dell'OP, ma le mie impostazioni internazionali sono fr_FR e tutto funziona correttamente sul mio computer ma non sul server di sviluppo.

Se aggiungo un iconv (come la maggior parte delle persone suggerisce quando si verifica questo problema su Google), funziona sul server di sviluppo ma non sul mio computer, quindi avevo bisogno di una soluzione "a prova di proiettile" che funzionasse allo stesso modo ovunque (come è anche un server di produzione).

Quindi, il problema qui è con il setlocale, questa funzione modifica le impostazioni locali sull'esecuzione corrente, ma ogni locale è associato a un set di caratteri e, se nessuno è specificato, ricade su quello predefinito del sistema (I penso che nel mio caso si stesse ricadendo su ISO-8859-1 quando si utilizza la locale fr_FR). È possibile elencare tutte le localizzazioni disponibili sul proprio computer/server con il comando locale -a. Molto probabilmente vedrai il locale che vuoi, con ".UTF-8" (nel mio caso "fr_FR.UTF-8"), è così che devi impostarlo: setlocale('fr_FR.UTF-8');

0

Per quelli che non hanno iconv , è possibile utilizzare i mb funzione per convertire lo stftime stringa codificata in UTF-8

echo mb_convert_encoding(strftime("%A, %d de %B",strtotime($row['Date'])), 'UTF-8', mb_internal_encoding()); 
Problemi correlati