我使用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
为什么会这样,我该如何解决这个问题?提前谢谢。
答案 0 :(得分:37)
在我的情况下,简单更改区域设置就可以了。
而不是:
setlocale(LC_TIME, "de_DE");
使用:
setlocale(LC_TIME, "de_DE.UTF-8");
答案 1 :(得分:3)
在Windows环境(XAMPP)中,setlocale(LC_TIME, "de_DE.UTF-8")
没有为我解决问题,因此我使用了区域设置"de"
然后 - 正如@Chris在对another answer的评论中所建议的那样 - 手动将字符串转换为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
答案 2 :(得分:2)
您可以尝试将您的网页设为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