PHP «поддерживает» UTF8, посмотрите расширение mbstring 1 . Большая часть проблемы исходит от разработчиков PHP, которые не используют функции mb * при работе с данными UTF8.
Символы UTF8 часто являются более чем одним символом, поэтому вам нужно использовать функции, которые оценивают этот факт, например mb_strpos 2 , а не strpos 3 .
Работает нормально, если вы получаете UTF8 из браузера -> помещаете в базу данных -> возвращаете его обратно -> отображаете его для пользователя. Если вы делаете что-то более связанное с данными UTF8 (или вообще с какой-либо серьезной обработкой текста), вам, вероятно, следует рассмотреть возможность использования альтернативного языка.