Make sure that you add the UTF-16LE byte order mark to the start of the file chr(255). Make sure that you convert your UTF-8 CSV text to UTF-16LE mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8') In order to output UTF-8 content that Excel both on Windows and OS X will be able to successfully read, you will need to do two things: Newer versions (from Office 365) do now support UTF-8. Update, 2017: This is true of all versions of Microsoft Excel for Mac before Office 2016. Not sure it'll work on Mac.Įxcel for Mac does not currently support UTF-8 I believe this is a pretty ugly hack, but it worked for me, at least for Excel 2007 Windows. Header('Content-Disposition: attachment filename=Customers_Export.csv') Header('Content-type: text/csv charset=UTF-8') In my case, if I add a BOM to the output, it works: header('Content-Encoding: UTF-8')