php fwrite不会写öäü/ utf8

时间:2014-10-31 12:09:04

标签: php mysql utf-8 fopen fwrite

我一直试图解决这个问题大约1.5小时,但我无法让它工作。我也在Google上搜索过。

W3C Validator说我的服务器发送了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&amp; uuml; r Computer mit h&amp; ouml; heren

我的Firefox浏览器正确显示了öäü,但我无法获得有效的RSS 2.0 Feed,因此不会显示Feed条目。

2 个答案:

答案 0 :(得分:0)

尝试将标题设置为UTF8

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

答案 1 :(得分:0)

在桌面上:

尝试使用在打开文件时正确处理UTF-8编码的程序。 没有BOM和ASCII的UTF-8在最低代码点上是相同的,有些程序根据不必包含更高代码点的任何字符的样本确定编码。(注意:Windows&# 39; 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.),编码很好,只是您的程序和服务器的标头不正确。

在服务器端:

通过打开一个正确处理没有BOM的UTF-8的程序确认该文件是UTF-8后,您必须检查您的网络服务器的配置(或至少是您的子域的配置)。

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

W3C's Setting charset information in .htaccess文章可以提供帮助。

  

按扩展程序指定

     

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

     

AddCharset UTF-8 .html

     

可以指定或不指定扩展名   一个领先的点。您可以在同一行中添加多个扩展名。这个   如果您有文件名,例如example.en.html或   example.html.en。

     

该示例将导致提供扩展名为.html的所有文件   作为UTF-8。 HTTP Content-Type标头将包含一行结束   与#charset&#39;信息如下面的例子所示。

     

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)