Французские символы php strftime

Я работаю над сайтом, на котором пользователь может переключаться между английским и французским. Вывести дату сообщений.

Если пользователь выбирает французский, я использую:

setlocale(LC_ALL, 'fra_fra'); 

Затем для вывода даты, которую я использую:

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

У меня есть charset на utf-8 с:

 <meta charset="utf-8"> 

Проблема у меня есть символы, такие как û и другие с акцентами, которые отображаются только как черные бриллианты с вопросительными знаками.

Есть ли способ исправить это?

Кажется, это проблема / ошибка с функцией strftime .

Вы можете решить эту проблему, используя:

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

Заголовок Content-Type должен установить кодовую страницу в UTF-8.

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

Поскольку вы не можете изменить заголовок, как только вы выведете что-либо на страницу с эхом или печатью, убедитесь, что вы установили его на ранней странице.

Кодовая страница ASCII полностью содержится в UTF-8, а не наоборот.

Замените заголовок UTF-8 на ASCII, и вы увидите, что произойдет, когда символы не будут включены в текущую кодовую страницу.

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

Локалы бывают разных кодировок! Вы рекламируете свой сайт с использованием UTF-8, но strftime не возвращает кодированную строку UTF-8, потому что выбранный вами язык не является языковым стандартом UTF-8. Проверьте систему, какие у вас есть, например:

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

Затем выберите вариант UTF-8 вашего языка, например:

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

Если у вас нет варианта вашей локали UTF-8, либо обратитесь в справочную систему вашей ОС, как ее установить, либо выполните преобразование кодировки в PHP.

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

// 11.06.2015 – Першембе

Если вы показываете свою страницу с помощью кодировки utf8, вы хотите получить utf8 из strftime.

Если charset php является utf8, тогда вы готовите. Если нет, вы можете:

  • utf8encode() вывод strftime.

  • append '.utf8' к вашему '.utf8' выражению, если эта локаль установлена ​​в вашей системе, как в setlocale(LC_ALL, 'fr_FR.utf8')

  • измените charset по умолчанию php, поместив строку AddDefaultCharset UTF-8 в ваш php.ini или ваш .htaccess

Вы добавили это в заголовок?

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