特殊字符在一台服务器上显示为问号,而在另一台服务器上不显示



我有一个wordpress网站,我正在使用多种语言的某种日历。在法语中,特殊字符ô…在暂存服务器上完美显示,但在实时服务器上转换为问号。谁能帮我指出如何解决这个问题?

日期由php生成:

$langCode = "fr_FR";
setlocale(LC_ALL, $langCode);
$MysqlDate = strtotime(get_post_meta(get_the_ID(), 'date', TRUE));
$month = ucwords(strftime("%b", $MysqlDate));

头部也设置了utf-8

<meta charset="utf-8">

setlocale取决于系统,特别是如果你使用windows,如果你提供像UTF-7或UTF-8这样的代码页,setlocale将失败,返回NULL。

在这里检查msdn参考:http://msdn.microsoft.com/en-us/library/x99tb11d.aspx

我想指出一些事情,这不是很清楚:您可以添加字符集信息到setlocale()

的例子:

在我的utf-8-encoded页面中,我想插入当前月份的名称,恰好是3月,用德语"März"-带变音符。如果使用:

setlocale(LC_TIME, 'de_DE');
echo strftime("%B");

…这将返回"März",但该html-entity将在utf-8页面上看起来像这样:"M?"Rz"加上问号。这不是我想要的。

但是如果你使用:

setlocale(LC_TIME, 'de_DE.UTF8');  // note the charset info !
echo strftime("%B");

…这返回"M√§rz",在utf-8下,它看起来应该是:"März"。

同样的解决方案将适用于法语,只需在调用setlocale()时输入字符集info。

相关内容

最新更新