2012-01-24 10 views
21

Sto lavorando su un sito in cui l'utente può passare dall'inglese al francese. Per stampare la data dei post.php strftime caratteri francesi

Se l'utente sceglie francese che uso:

setlocale(LC_ALL, 'fra_fra'); 

Poi la data di utilizzare per l'output:

strftime('%d %B %Y', strtotime($post->post_date)); 

ho il mio charset in UTF-8 con:

<meta charset="utf-8"> 

Il problema che ho sono caratteri come û e altri con accenti solo visualizza come i diamanti neri con punti interrogativi.

C'è un modo per risolvere questo problema?

+0

Hai questo problema nel contenuto della pagina in generale o solo nelle date? – makriria

+0

Si stava verificando solo nelle date. L'utilizzo di utf8_enocde ha corretto questa – ianckc

risposta

45

questo sembra essere un problema/bug con la funzione strftime.

È possibile risolverlo utilizzando:

$date_string = utf8_encode(strftime('%d %B %Y', strtotime($post->post_date))); 
+1

Perfetto! Grazie. – Steffi

+0

Perfetto! Risolto il problema anche per me. Aveva un accento nel formato della data e doveva aggiungerlo come un codice UTF8. È necessario modificare: '% e% B% Y à% kh% M' a: '% e% B% Y ' % kh% M' – onemesh

+1

Il problema è, 'utf8_encode' su una stringa che è già in' utf-8', perderà gli accenti _even more_. Inoltre, 'mb_detect_encoding' ha riportato' F vrier' (che dovrebbe leggere 'Février') come' utf-8' già. –

0

Hai aggiunto questo sull'intestazione?

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

Molte funzioni sulla stringa che non sono binari, hanno un equivalente mb_xxxx. Quindi considera anche questo http://php.net/manual/en/ref.mbstring.php – makriria

+0

Avrò una lettura delle funzioni mbstring grazie – ianckc

+0

Con utf-8 una lettera è di due byte. Di solito il carattere diamante con punto interrogativo indica l'un byte dei due di un carattere. – makriria

11

L'intestazione Content-Type deve impostare la codepage su UTF-8.

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

Dal momento che non è possibile modificare l'intestazione una volta che hai uscita nulla alla pagina con eco o stampa assicurarsi lo si imposta nelle prime fasi della pagina.

La tabella codici ASCII è completamente contenuta in UTF-8 e non viceversa.

Sostituire l'intestazione UTF-8 con la ASCII uno e vedrete cosa succede quando i personaggi non sono inclusi nella tabella codici corrente.

<?php 
header('Content-Type: text/html; charset=UTF-8'); 
//header('Content-Type: text/html; charset=ASCII'); 

$myDate = "Feb 23, 2011"; 

$locale = 'fr_FR.UTF-8'; 
setlocale(LC_ALL, $locale); 
echo strftime('%d %B %Y', strtotime($myDate)); 

$locale = 'en_US.UTF-8'; 
setlocale(LC_ALL, $locale); 
echo strftime('%d %B %Y', strtotime($myDate)); 
?> 
+0

buona spiegazione – konsolenfreddy

+12

'setlocale (LC_ALL, 'fr_FR.UTF8');', e non solo ''fr_FR'', risolto per me. –

1
<?php 
    date_default_timezone_set('Europe/Istanbul'); 
    setlocale(LC_TIME,"turkish"); 
    echo date("d.m.Y").' - '.iconv("ISO-8859-9","UTF-8",strftime('%A')); 
?> 

// 2015/11/06 - giovedì

1

Se si visualizza la pagina con la codifica utf8, si vuole ottenere utf8 di strftime.

Se il set di caratteri di php è utf8, allora stai cucinando. In caso contrario, è possibile:

  • utf8encode() l'output di strftime.

  • accodamento '.utf8' per la sua dichiarazione locale se questo locale è installato sul sistema, come nel set di caratteri di default setlocale(LC_ALL, 'fr_FR.utf8')

  • cambiamento di php, mettendo la linea AddDefaultCharset UTF-8 nel vostro php.ini o il vostro .htaccess

3

I locali sono disponibili in diverse codifiche! Stai pubblicizzando il tuo sito come UTF-8, ma strftime non restituisce una stringa con codifica UTF-8, perché la locale che hai scelto non è una locale UTF-8. Controllare il sistema che cosa locali si ha, ad esempio:

$ locale -a | grep fr_FR 
fr_FR 
fr_FR.ISO8859-1 
fr_FR.ISO8859-15 
fr_FR.UTF-8 

Quindi scegliere la variante UTF-8 del proprio locale, ad esempio:

setlocale(LC_ALL, 'fr_FR.UTF-8'); 

Se non si dispone di una variante UTF-8 del proprio locale disponibile, consultare il sistema di guida del proprio sistema operativo come installarlo o eseguire una conversione di codifica in PHP.