php fwrite does not write öäü / utf8


php fwrite does not write öäü / utf8

我已经试着解决这个问题大约1.5个小时了,但一直无法解决。我也在谷歌上搜索过。

W3C验证器说我的服务器发送了一个US-ASCII头。

我写了

<?xml version="1.0" encoding="utf-8"?>

在XML中。

我有MySQL与德语文本。MySQL数据库位于utf8_unicode_ci中,并且可以正常工作:它可以正确保存。

现在我想从MySQL数据库中保存的数据创建一个XML文件。一切都很好,但元音变音符不是写出来的。

我试着用

$this->rss_data .=utf8_encode(....

但没有奏效。

$this->rss_data .=utf8_decode(...

也不起作用。

我也试过

fwrite($this->rss_file, utf8_encode($this->rss_data)) or die("Error while writing rss xml");

这也没有奏效。

保存的文本在我的XML 中如下所示

Betriebssysteme sind f&uuml;r计算机mit h&ouml;相干

我的Firefox浏览器显示的是正确的,但我无法获得有效的RSS 2.0订阅源,因此订阅源条目不会显示。

在桌面上:

打开文件时,请尝试使用能够正确处理UTF-8编码的程序UTF-8(不含BOM和ASCII)在最低代码点上是相同的,一些程序根据样本确定编码,该样本不必包含来自较高代码点的任何字符(注意:Windows的notepad.exe不是检查文件的最佳选择)

Unicode的前128个字符与ASCII一一对应,使用与ASCII具有相同二进制值的单个八位字节进行编码,从而使有效的ASCII文本也成为有效的UTF-8编码Unicode。(http://en.wikipedia.org/wiki/UTF-8)

另一种方法是在程序中显式地将编码设置为UTF-8,并使用该设置检查文件。

根据你的最后一句话(My Firefox browser shows the öäü correctly, but I cannot get a valid RSS 2.0 feed, and so the feed entries don't show.),编码很好,只是你的程序和服务器的标题不正确。

在服务器端:

在您通过打开一个正确处理UTF-8而不带BOM的程序来确认该文件是UTF-8文件后,您必须检查Web服务器的配置(或者至少检查子域的配置)。

您必须在标头中设置*.xml(或特定xml)的编码。如果使用预生成的文件,则必须在域或服务器的配置中执行此操作。

W3C在.htaccess文章中的设置字符集信息可能会有所帮助。

通过扩展指定

使用AddCharset指令将字符编码与当前目录中具有特定扩展名的所有文件,以及其子目录。例如,为具有扩展名的所有文件提供服务.html转换为UTF-8,在纯文本编辑器中打开.htaccess文件,然后键入以下行:

AddCharset UTF-8 .html

可以指定扩展名,也可以不指定前导点。可以向同一行添加多个扩展名。这如果您有example.en.html或example.html.en.

该示例将提供所有扩展名为.html的文件如UTF-8。HTTP内容类型标头将包含一行使用"charset"信息,如下例所示。

Content-Type: text/html; charset=UTF-8

注意:所有带有此的文件当前位置的所有子目录中的扩展也将是用作UTF-8。如果出于某种原因,您需要提供奇数文件使用不同的编码,您需要使用附加指令。

注意:您可以将字符编码与任何扩展名相关联附加到您的文件中。例如,假设你学习语言谈判,你有两种语言的页面遵循模型example.en.html和example.ja.html很乐意使用服务器的ISO-8859-1默认值提供英文页面,但希望提供UTF-8格式的日语文件。

总结意见

如果使用输出转义(htmlentitieshtmlspecialcharsstrip_tags等),请检查这些函数是否存在干扰或多次调用。

多次使用htmlentities()可能会导致不希望的结果:

htmlentities('Ö') = &Ouml; (Ö in the browser)
htmlentities(htmlentities('Ö')) = &amp;Ouml; (&Ouml in the browser)

尝试将页眉设置为UTF8

header('Content-Type: text/html; charset=utf-8');