【发布时间】:2016-02-22 06:10:59
【问题描述】:
我不知道我做错了什么。我正在从数据库中获取文件内容。当我回显内容时,一切都显示得很好,当我将其写入文件 (.html) 时,它会中断。我尝试了 iconv 和其他一些解决方案,但我只是不明白我应该为第一个参数输入什么,我尝试了空白,但效果也不是很好。我认为如果回显正确,它会以 UTF-8 形式从数据库中出来。现在卡了一段时间,运气不好。
function file($fileName, $content) {
if (!file_exists("out/".$fileName)) {
$file_handle = fopen(DOCROOT . "out/".$fileName, "wb") or die("can't open file");
fwrite($file_handle, iconv('UTF-8', 'UTF-8', $content));
fclose($file_handle);
return TRUE;
} else {
return FALSE;
}
}
html文件的源代码如下。
像这样从数据库中出来:
<h5>Текущая стабильная версия CMS</h5>
像这样进入文件
<h5>Ð¢ÐµÐºÑƒÑ‰Ð°Ñ ÑÑ‚Ð°Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ CMS</h5>
编辑:
原来问题的根源是 Apache 错误地提供文件。添加
AddDefaultCharset utf-8
对我的 .htaccess 文件进行了修复。浪费时间……不过至少我学到了一些东西。
【问题讨论】:
-
将您的输出 HTML 放在某处。您可能尚未将 UTF-8 标记标头添加到 HTML。
-
@Dean 即使查看源代码也会很重要吗?
- Ðа форуме чаÑто упоминаеÑ,ÑÑ ÐºÐ¾Ð´Ð¾Ð³ÐµÐ½ÐµÑ€Ð°Ñ,ор。
-
我敢打赌 Ð¢ÐµÐºÑƒÑ‰Ð°Ñ ÑÑ‚Ð°Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ 是 Текущая стабильная версия 的 UTF-8 被视为 ISO-8859 -1,也是因为字符 Ð 在 ISO-8859-1 中是 0xD0,而 0xD0 是西里尔字母的 2 个 UTF-8 字节中的第一个。这意味着您正在编写 UTF-8,但将其视为 ISO-8859-1(或 ISO-8859-15)。
-
@Martin 您指向我的 Walter Tross 评论。他说是读者。因此,当我通过 cat 输出文件后,我得到了很好的结果,并且认为我的阅读器,即 Apache,有问题。接下来我做的是 google Apache 和 UTF-8 并得到了stackoverflow.com/questions/913869/…
-
很高兴我能帮上忙。不过,我必须更正我的评论:Unicode 的西里尔字母块中的字符在编码为 UTF-8 时以 0xD0、0xD1、0xD2、0xD3 之一开头(因为它们在 U+0400 到 U+04FF 的范围内)。这 4 个起始字节在 ISO-8859-1 中显示为 Ð、Ñ、Ò 和 Ó(频率递减)。