As Chuck said above, this is a database problem. If you do not want to display non-Unicode, that is, Latin characters, then yes, preg_replace is the way to go. You will need to know the character set well enough to filter out what you don't want.
But if you just want everything to display beautifully, that is, no garbage characters, then change the appropriate parts of db to accept utf-8.
. mySQL, , UTF-8. latin1_general_ci - utf8_general_ci. , .