strftime 日期格式中的德语变音符号 - 更正 utf-8 编码



我正在使用 PHP 14. März 2012(即 2012 年 3 月 14 日)创建这样的德语日期格式。

我正在使用包含 unix 时间戳的$date[0],我像这样将其转换为可读的德国日期。

$date_day_month = strftime('%d. %B', $date[0]);
$date_year = strftime('%Y', $date[0]);
echo $date_day_month . $date_year;

但是我不知何故对像这样的变音ä打了一个问号

14. M�rz 2012

为什么会这样,我该如何解决这个问题?提前谢谢。

就我而言,对语言环境的简单更改就可以解决问题。

而不是:

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

你可以尝试让你的网页变成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

最新更新