We recently came across this pesky problem and found these two articles very helpful.
Don’t save your UTF-8 files with BOM as it creates issues.
“Headers must be written before any data is sent to the client. Unicode files may include a Byte-Order Mark (BOM) to help distinguish the big endian and little endian byte order. Unfortunately, the BOM isn’t understood by PHP. Upon encountering the BOM, PHP assumes that it is dealing with data, by which time it’s too late to modify headers. Solution? Save the file in UTF-8 encoding without a BOM.”
“If file A or file B has UTF-8 encoding then you will get the error:
Warning: session_start() [function.session-start]: Cannot send session
cache limiter – headers already sent (output started at index.php:1) in
session.php on line 3
Using UTF-8 encoding WITHOUT BOM (Byte Order Mark) seems to fix the