Я работаю над сайтом, на котором пользователь может переключаться между английским и французским. Вывести дату сообщений.
Если пользователь выбирает французский, я использую:
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" />