php到rtf,é变成了é

Jer*_*Roy 4 php unicode rtf utf-8 special-characters

使用这个rtf类,我看到我的特殊字符被转换,就像é 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); 
Run Code Online (Sandbox Code Playgroud)

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

获得excel时我遇到了类似的问题,但这可以通过使用来解决

$text = mb_convert_encoding($text,'utf-16','utf-8');
Run Code Online (Sandbox Code Playgroud)

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

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

干杯.

Jer*_*Roy 8

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

mb_convert_encoding($text,'ISO-8859-15','utf-8');
Run Code Online (Sandbox Code Playgroud)


tch*_*ist 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系统上吗?他们似乎经常对事物进行双重编码.