php到rtf,é变成了é

时间:2011-04-16 18:45:45

标签: php unicode utf-8 special-characters rtf

使用此rtf class,我看到我的特殊字符会被转换,例如é becomes \'C3\'A9(该部分可能不是问题)

一旦我使用php标头在rtf中获取它,结果字符(é)将被视为é

header("Content-type: application/rtf; charset=utf-8");
header("Content-Disposition: attachment; filename=$file_rtf");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); 

奇怪!我的文件保存在utf-8中,供参考。

我在获得excel时遇到了类似的问题,但是使用

解决了这个问题
$text = mb_convert_encoding($text,'utf-16','utf-8');

这不适用于rtf。谢谢你的帮助。

PS。我的文件用utf-8编码保存'DW',我的mysql默认字符集也是utf-8。我直接从数据库中显示字符时没有问题,但只有在我使用标题之前直接在页面中键入特殊字符时才会出现此问题。

干杯。

4 个答案:

答案 0 :(得分:7)

好吧,最后我用以下方法解决了它:

mb_convert_encoding($text,'ISO-8859-15','utf-8');

答案 1 :(得分:5)

你正在进行双重编码。 \N{LATIN SMALL LETTER E WITH ACUTE}字符是代码点U + 00E9。在UTF-8中,即\xC3\xA9

但是如果你转过身将这两个字节视为不同的代码点U + 00C3和U + 00A9,那么它们分别是\N{LATIN CAPITAL LETTER A WITH TILDE}\N{COPYRIGHT SIGN}

现在一旦那些现在依次得到重新编码,就会得到字节序列\xC3\x83\xC2\xA9,这就是你所看到的。

你在Windows系统上吗?他们似乎经常对事物进行双重编码。

答案 2 :(得分:1)

您应该询问脚本的作者,但从文档和提供的编码判断,它不是UTF8友好的。因此,您可以尝试将文本转换为代码页(例如cp1251),并使用此类中的可用编码之一来查找最佳结果。

答案 3 :(得分:1)

嗯,从mysql中解决同样的问题。我的页面以UTF-8编码,我的数据库也是如此。我甚至通过把

强迫mysqli进入utf-8模式
if (!$mysqli->set_charset("utf8")) {echo "utf8 on";} else {echo "utf8 already on";}; 

没有任何帮助,我一直得到é

这是我的解决方案,不是雄辩的,但它确实有效。

echo str_replace('é', 'é', $mySQLResult);
相关问题