I have noticed this exact problem in my database driven applications, and it took me a long time to work it out!
The problem occurs because there are at least three places in your application that need their character sets defining, and they must all be the same character set (and that character set must be able to handle the characters you are handling).
The question mark symbol and it's variations occurs when the browser doesn't understand what character it is being passed.
Make sure your character sets match in the following places:
- The HTML head section.
- The database collation itself - this can be set in phpMyAdmin when you create a new table, or alter the schema of an existing table.
- The most overlooked character set setting: The php.ini file's "default_charset" value (can be set via PHP script or the httpd.conf file).
Judging from your post, it looks like your PHP configuration might be set to be using a different default_charset. This means that your database will be storing the characters fine, and will be sendign the characters fine to your script, but the PHP script itself will not know what to do with the character, and thus outputs to the browser as the annoying question mark symbol.
Try changing the php.ini value to the same charset, and you may be surprised to see the characters displaying fine! If you don't have access to php.ini, you can change the value with the following function:
ini_set("default_charset", "UTF-8");
Hope this helps.