2013-12-20 112 views
0

我有UTF-8 MySql数据库,它从来没有问题,在浏览器内显示的东西 但我面临的问题时,试图将UTF8数据保存到文件(或通过强制下载传输) 。 所有不相关的字符都显示不正确(不管我切换什么编码) 只是fyi:文本的那部分是希伯来语。UTF8正确的文本,但保存不正确

我试过至今并未能:

  • 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(); 
+1

你究竟如何测试*它是“保存不正确”?编码需要两方:一个*正确写*,一个正确*读*。 – deceze

+0

以及我只是写入文件,就是这样。至于阅读 - 我在文本编辑器中尝试了几乎所有可能的编码,并且它不显示正确的符号。 (我也测试了windows-1255,这是希伯来语) – Serg

+1

所以你打开文件编辑器中的文件...你是如何确保它正确地读取文件?也许尝试使用十六进制编辑器,并向我们展示原始内容。 – deceze

回答

0

后的研究几天我发现,你需要一些东西来解决编码问题:

  • 确保您使用的浏览器可以显示不同的编码(力改变编码文件,如果需要),几乎肯定每个IDE都可以做到这一点。
  • 什么编码您有麻烦务必(我的情况是在Windows-1255)
  • 实验的iconv()函数来转换您有问题的部分文字。

因此,毕竟它变成F4浏览器AkelPad没有显示希伯来文符号。 祝你好运!

0

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

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

只要确定,仔细检查相关列的编码是否能够存储您的字符(例如UTF-8等一些unicode方案),并且文本存储正确(从MySQL工作台或其他客户比你的应用程序)

+0

使用已经和失败,设置名称是没有必要在我的情况,因为正如我解释浏览器页面正常工作与该文本 – Serg