我有UTF-8 MySql DB,在浏览器中显示内容从来都不是问题 但是当我尝试将UTF8数据保存到文件中(或通过强制下载传输它)时,我遇到了问题。 显示错误的所有非lara charachters(无论我切换什么编码) 只是fyi:文本的一部分是希伯来语。
到目前为止我尝试过但失败了:
set names 'utf-8'
mb_internal_encoding('UTF-8')
utf8_encode
部分字符串或完整文字fwrite($f, pack("CCC",0xef,0xbb,0xbf));
(是的,文件被识别为utf8,但符号仍然不正确)最令人沮丧的是浏览器始终正确显示它 任何想法,男士?
PS:这是我发送强制下载文件的方式:
header('Content-Description: File Transfer');
header('Content-Type: application/xml; charset=utf-8');
header('Content-Disposition: attachment; filename=xml_invoices.xml');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($xml_file));
echo $xml_file; //this string contains latin and non-latin charachters
exit();
答案 0 :(得分:0)
可能您想要更改连接的charset。在连接后发出SET NAMES 'UTF-8'
,或者如果使用PDO,则将charset配置charset=utf8
附加到连接字符串。
这是必要的,因为客户端在从服务器检索字节流后对文本列的内容进行转码,并且转码是从列编码到客户端字符集,因此you must override it。
为了确保,请仔细检查相关列的编码是否能够存储您的字符(例如某些unicode方案,如UTF-8)以及文本是否正确存储(从MySQL工作台或其他客户端检查)比你的申请)
答案 1 :(得分:0)
经过几天的研究,我发现你需要很少的东西来解决编码问题:
所以它毕竟转向了F4观众AkelPad根本没有显示希伯来符号。 祝你好运!