php to rtf, é becomes é

跟風遠走 提交于 2019-12-21 05:32:08

问题


Using this rtf class, I see my special characters getting converted, like é becomes \'C3\'A9 (that part is probably not the problem)

Once I get it in rtf using php header, the resulting character (é) is seen as é.

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); 

Strange! My file is saved in utf-8, for information.

I had a similar problem while getting excel, but that is solved using

$text = mb_convert_encoding($text,'utf-16','utf-8');

This is not working for rtf. Thanks for any help.

PS. My file is saved with utf-8 encoding thro' DW, and my mysql default charset is also utf-8. I don't have a problem when I display a character directly from the database, but this problem is seen only when I type a special character directly into the page before to use the header.

Cheers.


回答1:


Well, finally I solved it using:

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



回答2:


You’re getting double-encoded. A \N{LATIN SMALL LETTER E WITH ACUTE} character is code point U+00E9. In UTF-8, that is \xC3\xA9.

But if you turn around and treat those two bytes as distinct code points U+00C3 and U+00A9, those are \N{LATIN CAPITAL LETTER A WITH TILDE} and \N{COPYRIGHT SIGN}, respectively.

Now once those now in turn get re-encoded, you get the byte sequence \xC3\x83\xC2\xA9, which is what you are seeing.

Are you on Windows system? They often seem to double-re-encode things.




回答3:


You should ask author of the script, but judging from documentation and provided encodings, it is not UTF8 friendly. So you may try converting text to your code page (ex. cp1251) and using one of available encodings in this class to find best results.




回答4:


hmm, having the same problem pulling from mysql. My page is encoded in UTF-8, as is my database. I'm even forcing mysqli into utf-8 mode by putting

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

nothing helps, i keep getting é

this was my solution, not eloquent, but it works.

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


来源:https://stackoverflow.com/questions/5688728/php-to-rtf-%c3%a9-becomes-%c3%83

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!