2012-01-24 12 views
21

Estoy trabajando en un sitio donde el usuario puede cambiar entre inglés y francés. Para dar salida a la fecha de las publicaciones.php strftime Caracteres franceses

Si el usuario elige francesa que utilizo:

setlocale(LC_ALL, 'fra_fra'); 

A continuación, a la salida de la fecha en que utilizar:

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

tengo mi juego de caracteres a UTF-8 con:

<meta charset="utf-8"> 

El problema que tengo es caracteres como û y otros con acentos solo mostrar como los diamantes negros con signos de interrogación en.

¿Hay alguna manera de arreglar esto?

+0

¿Tiene este problema en el contenido de la página en general o en las fechas solamente? – makriria

+0

Solo estaba ocurriendo en las fechas. El uso de utf8_enocde ha solucionado esto – ianckc

Respuesta

45

Esto parece ser un problema/error con la función strftime.

se puede resolver usando:

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

¡Perfecto! Gracias. – Steffi

+0

¡Perfecto! Solucionado mi problema también. Tenía un acento en el formato de fecha y tuve que agregarlo como un código UTF8. Tuvo que cambiar: '% e% B% Y à% kh% M' a: '% e% B% Y & agrave; % kh% M' – onemesh

+1

El problema es que 'utf8_encode' en una cadena que ya está en' utf-8' confundirá los acentos _ incluso más_. Además, 'mb_detect_encoding' reportó' F vrier' (que debería leer 'Février') como' utf-8' ya. –

0

¿Ha agregado esto en el encabezado?

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

Muchas funciones sobre cadena que no son binarias seguras, tienen un equivalente mb_xxxx. Así que considere también este http://php.net/manual/en/ref.mbstring.php – makriria

+0

Voy a leer las funciones de mbstring gracias a – ianckc

+0

Con utf-8, una letra tiene dos bytes. Por lo general, el carácter de diamante con signo de interrogación significa el byte de los dos de un personaje. – makriria

11

El encabezado Content-Type necesita establecer la página de códigos en UTF-8.

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

Como no se puede cambiar la cabecera una vez que haya nada de salida a la página con eco o de impresión asegúrese de que establece que a principios de la página.

La página de códigos ASCII está totalmente contenida en UTF-8, no viceversa.

el header de la UTF-8 con el ASCII uno y verá lo que sucede cuando los personajes no están incluidos en la página de códigos actual.

<?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

buena explicación – konsolenfreddy

+12

'setlocale (LC_ALL, 'fr_FR.UTF8');', y no solo ''fr_FR'', lo arregló para mí. –

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')); 
?> 

// 11/06/2015 - jueves,

1

Si se visualiza la página con la codificación UTF-8, que desea obtener utf8 de strftime.

Si el juego de caracteres de php es utf8, entonces estás cocinando. Si no es así, se puede:

  • utf8encode() la salida de strftime.

  • append '.utf8' a su estado de cuenta local si este local está instalado en el sistema, como en el juego de caracteres por defecto setlocale(LC_ALL, 'fr_FR.utf8')

  • cambio de php, poniendo la línea AddDefaultCharset UTF-8 en su php.ini o su .htaccess

3

¡Las configuraciones regionales vienen en diferentes codificaciones! Está anunciando que su sitio utiliza UTF-8, pero strftime no devuelve una cadena codificada en UTF-8, porque la configuración regional que eligió no es una configuración regional UTF-8. Compruebe su sistema de los locales que tiene, por ejemplo:

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

A continuación, elija la variante UTF-8 de su localidad, por ejemplo:

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

Si usted no tiene una variante UTF-8 de su localidad disponible, o consulte el sistema de ayuda de su sistema operativo sobre cómo instalarlo o realice una conversión de codificación en PHP.