Iirc, Byte Order Mark has no actual meaning for UTF-8, whereas for UTF-16, it's necessary to know in what order bytes are stored. So I don't know why there even is one for utf-8, but the way it works is that the BOM is placed at the very beginning of a file. In the case of utf-8, I believe it's 0xFF 0xFE.
Since the file starts with that if you save using BOM, the PHP parser finds that the file starts with something other than <?php and simply sends the FF FE bytes to output, thus screwing with the ability to send headers etc.
Some text editors lets you specify to save utf-8/16 with or without BOM, others simply save without it and yet others (most commonly windows editors) save with it.
If you need the file to be in utf-8 and have no option of saving without BOM, you could create a php script which checks if the first two bytes are FF FE and if so, strip them from the file. That way, you end up with a file in utf-8 without BOM.
But before you do that, double check on wikipedia what the actual byte sequence is. I wouldn't personally trust my memory on this one 😉