我很难使用角色字符集,我怀疑我的功能是显示日期以返回非UTF-8字符(août被钻石内的问号替换为août )。
在我的本地服务器上工作时一切都很好但是当我在我的登台服务器上推送我的代码时,它没有正确显示。
以下是我怀疑导致问题的部分:
$langCode = "fr_FR"; /* Alos tried fr_FR.UTF-8 */
setlocale(LC_ALL, $langCode);
$monthName = _(strftime("%B",strtotime($dateStr)))
echo $monthName; /* Alos tried utf8_encode($monthName) worked on my staging server but not on my local server ! I'm using */
答案 0 :(得分:1)
最后找到了如何找到错误并修复它。
setlocale(LC_ALL, 'fr_FR');
var_dump(mb_detect_encoding(_(strftime("%B",strtotime($dateStr)))));
转储在登台服务器上的本地和UTF-8
上返回FALSE
。
PHP.net documentation about mb_detect_encoding()
返回值¶
检测到的字符编码,如果编码不能,则为FALSE 从给定的字符串中检测到。
因此无法检测到charset。我会尝试“再次”强迫它
setlocale(LC_ALL, 'fr_FR.UTF-8');
var_dump(mb_detect_encoding(_(strftime("%B",strtotime($dateStr)))));
这次转储在登台服务器上的本地和UTF-8
上返回UTF-8
。所以我回滚我的代码,看看当我第一次尝试使用fr_FR.UTF-8时发生了什么,为什么它不起作用?并且我意识到我正在使用utf8_encode()
,例如用户 deceze 指向此函数的doc的评论,
感谢大家的帮助!
答案 1 :(得分:0)
将此元标记放在<head></head>
<meta charset="UTF-8">
答案 2 :(得分:0)
您的服务器似乎已配置为发送标头
content-type: text/html; charset=UTF-8
默认。您可以更改服务器配置,也可以在一开始就添加
<?php
header("content-type: text/html; charset=UTF-8");
?>
自己设置此标题。
答案 3 :(得分:0)
你需要使用:
<?php
$conn = mysql_connect("localhost","root","root");
mysql_select_db("test");
mysql_query("SET NAMES 'utf8'", $conn);//put this line after you select db.