It might be a 'AddDefaultCharset' apache problem. You may need to turn that setting off.
If I were a bettin' man, I'd say the problem is with mysql. Although your DB variables may all be correctly set to utf8 (connections and all), you may still get the question marks.
Before all your DB queries, send this query first:
If that solves it, you either need to do the above before executing any of your real queries.
mysql_query("SET NAMES 'utf8'")
If you have access to your mysql config file (my.cnf) then you can avoid the hassle above by adding the following to the [mysqld] section:
Also, make sure the following variables are properly set:
init_connect="SET NAMES utf8"
Keep in mind that the my.cnf fix does not work it your script is connecting to mysql using the 'root' account.