Немецкий умлаут в 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
Другие вопросы по тегам