Немецкий умлаут в strftime форматировании даты - правильная кодировка utf-8?
Я создаю немецкий формат даты, как это с PHP 14. März 2012
(это 14 марта 2012 года).
Я работаю с $date[0]
он содержит метку времени Unix, и я конвертирую ее в читаемую немецкую дату.
$date_day_month = strftime('%d. %B', $date[0]);
$date_year = strftime('%Y', $date[0]);
echo $date_day_month . $date_year;
Однако я как-то получаю знак вопроса для Умлаута ä
как это
14. M�rz 2012
Почему это так и как я могу это исправить? Заранее спасибо.
3 ответа
Вы можете попытаться сделать свою веб-страницу UTF-8, поместите это в свой head
тег:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
strftime
зависит от правильной настройки локали, поэтому проверьте setlocale()
и убедитесь, что локаль существует на машине, на которой работает php.
Обновить
Я запустил этот код на моем сервере:
setlocale(LC_ALL, 'de_DE');
$date[0] = mktime( 1, 0, 0, 3, 2, 2012 );
$date_day_month = strftime('%d. %B', $date[0]);
$date_year = strftime('%Y', $date[0]);
echo $date_day_month . $date_year;
И это выводит:
02. März2012
В моем случае простая смена локали сделала свое дело.
Вместо:
setlocale(LC_TIME, "de_DE");
Использование:
setlocale(LC_TIME, "de_DE.UTF-8");
В среде Windows (XAMPP), setlocale(LC_TIME, "de_DE.UTF-8")
не решил проблему для меня, поэтому я прибегнул к использованию локали "de"
а затем - как предложил @Chris в своем комментарии к другому ответу - вручную преобразовал строку в utf8:
setlocale(LC_TIME, "de");
$maerzLatin1 = strftime('%B', mktime(9, 0, 0, 3, 1, 2016));
$maerzUtf8 = utf8_encode($maerzLatin1); // this one contains "März" UTF8-encoded