PHP setlocale和iso-8859-1编码的麻烦

时间:2013-08-08 14:37:07

标签: php encoding strftime setlocale

我使用iso-8859-1编码创建了一个网站,我希望用法语显示日期。

这是我用于测试的文件:

<!DOCTYPE html>
<html lang="fr">
    <head>
      <meta charset="ISO-8859-1"/>
    </head>
    <body>
      <?php setlocale(LC_ALL, "fr_FR.iso88591"); echo strftime("%A %d %B %Y."); ?>
    </body>
 </html>

当我打开此文件时,我得到:Thursday 08 August 2013.而不是Jeudi 08 Août 2013.(法语)。

我尝试使用UTF-8并且它正常工作,但它不是我想要的......

我检查了服务器上安装的语言包,一切似乎都正确无误:

server$ sudo locale -a
C
C.UTF-8
français
french
fr_FR
fr_FR.iso88591
fr_FR.utf8
POSIX

如果您有任何想法可以解决这个问题,那将非常酷。

编辑:拼写错误!

3 个答案:

答案 0 :(得分:2)

你有错别字。 更改“setlocal”和“8895-1”

<!DOCTYPE html>
<html lang="fr">
    <head>
      <meta charset="ISO-8895-1"/>
    </head>
    <body>
      <?php setlocal(LC_ALL, "fr_FR.iso88951"); echo strftime("%A %d %B %Y."); ?>
    </body>
 </html>

分别为“setlocale”和“8859-1”。

<!DOCTYPE html>
<html lang="fr">
    <head>
      <meta charset="ISO-8859-1"/>
    </head>
    <body>
      <?php setlocale(LC_ALL, "fr_FR.iso88591"); echo strftime("%A %d %B %Y."); ?>
    </body>
 </html>

答案 1 :(得分:0)

就像我在评论中指出的那样,它应该是setlocale,而不是setlocal。

Google快速搜索指向this website,表明您应该这样做

setlocale(LC_ALL, "fr_FR.ISO-8859-1");

而不是

setlocal(LC_ALL, "fr_FR.iso88951");

编辑:

试试这个:

<?php
setlocale(LC_ALL, "fr_FR.iso88591");
setlocale(LC_NUMERIC, 'C');
echo strftime("%A %d %B %Y.");
?>

我没有尝试过,但值得一试。

答案 2 :(得分:-1)

代码中的错误(setlocal应该是setlocale):

<?php setlocale(LC_ALL, "fr_FR"); echo strftime("%A %d %B %Y."); ?>

还要确保您的系统上有法语区域设置:

locale -a

查看可用的语言环境(unix)。