I'm posting this up to save any other coders a very very long search through lots of code...
Microsoft Expression inserts an invisible mark called a 'byte order mark (
http://en.wikipedia.org/wiki/Byte-order_mark)'. It causes the php scripts to output ? at the end of files, but its invisible in the code even in other editors. The only way to see it is if you output something before the byte order mark was inserted:
In my case, my client opened the scripts config file, changed something and saved it (thus inserting this invisible mark that even i couldn't see in another editor afterwards).
<?
include('config.php');
?>
Outputted nothing, whereas
<?
echo 'test';
include('config.php');
?>
Would output "test?", yet config.php itself had no output at all.
So in summary, if you are experiencing mysterious code problems and are convinced you have gone mad, ask if someone using expression has edited your code
