我一直试图解决这个问题大约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条目。
答案 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提供日文文件。
总结评论
如果您正在使用输出转义(htmlentities
,htmlspecialchars
,strip_tags
等),请检查这些功能是否多次干扰或调用。
多次使用htmlentities()
可能会导致意外结果:
htmlentities('Ö') = Ö (Ö in the browser)
htmlentities(htmlentities('Ö')) = &Ouml; (Ö in the browser)