This article posted by Florian Eibeck on setting up php, Apache, and MySQL for dealing with international character sets is a good overview of the groundwork required to support a UTF-8 compliant web app.
As Florian rightly points out, there are non-UTF-8 safe functions lurking in php to upset the apple cart if you’re not aware of them. Although strlen() may not return the right result with double-byte characters, it doesn’t do your content any harm – there are plenty of others that do mangle double-byte content.
From my own experience, once the environment (Apache, MySQL) was set up correctly it’s those unsafe php functions that cause the most grief, both in tracking down the culprits and finding a work around. It is rewarding when it finally comes together, though – there’s something quite cool about seeing all manner of Scandinavian languages sitting on screen alongside Japanese and English in a web app created by your own hand. 🙂