UTF8正确文本但保存不正确

时间:2013-12-20 17:52:11

标签: php mysql utf-8

我有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();

2 个答案:

答案 0 :(得分:0)

可能您想要更改连接的charset。在连接后发出SET NAMES 'UTF-8',或者如果使用PDO,则将charset配置charset=utf8附加到连接字符串。

这是必要的,因为客户端在从服务器检索字节流后对文本列的内容进行转码,并且转码是从列编码到客户端字符集,因此you must override it

为了确保,请仔细检查相关列的编码是否能够存储您的字符(例如某些unicode方案,如UTF-8)以及文本是否正确存储(从MySQL工作台或其他客户端检查)比你的申请)

答案 1 :(得分:0)

经过几天的研究,我发现你需要很少的东西来解决编码问题:

  • 请确保您使用的查看器可以显示不同的编码(如果需要,强制更改文件编码),非常确定每个IDE都可以执行此操作。
  • 确定您遇到麻烦的编码(我的案例是windows-1255)
  • 使用iconv()函数进行实验,以转换您遇到问题的部分文本。

所以它毕竟转向了F4观众AkelPad根本没有显示希伯来符号。 祝你好运!