PHP转RTF,é变成é

4
使用这个rtf类,我发现我的特殊字符被转换了,比如é变成了\'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文件。感谢任何帮助。

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

干杯。

4个回答

10

好的,最终我使用以下方法解决了问题:

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

6
您的文本出现了双重编码。一个带有重音符号的小写字母“é”的Unicode编码是U+00E9,在UTF-8中,它对应的字节序列是\xC3\xA9。
但是如果您将这两个字节视为不同的Unicode编码U+00C3和U+00A9,那么分别对应的字符是大写字母“A”带有波形符号和版权符号。
当这些字符再次被重新编码时,您会得到字节序列\xC3\x83\xC2\xA9,这可能是您看到的内容。
您是否使用Windows操作系统?它们经常会出现双重重新编码的情况。

很好的解释,谢谢。 - Jeremy Roy

1

你应该询问脚本的作者,但根据文档和提供的编码来看,它不支持UTF8。因此,你可以尝试将文本转换为你的代码页(例如cp1251),并使用此类中可用的编码之一来找到最佳结果。


0

嗯,我也遇到了从mysql中提取数据的同样问题。我的页面和数据库都是以UTF-8编码的。我甚至通过添加代码强制mysqli进入utf-8模式。

if (!$mysqli->set_charset("utf8")) {echo "utf8 on";} else {echo "utf8 already on";}; 

没有什么帮助,我一直得到é

这是我的解决方案,不够简洁,但它有效。

echo str_replace('é', 'é', $mySQLResult);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接