In practice I've found that, in some systems, multi-byte functions default to ISO-8859-1 for internal encoding. That effectively ruins their ability to handle multi-byte text.
Setting a good default will probably fix this and some other issues:
mb_internal_encoding('UTF-8');