PHP: Est-il possible de correctement SUBSTR une chaîne UTF-8?

J'ai (dans une base de données SQLite) la chaîne de caractères suivante:

Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.

La chaîne est correctement indiqué par PHP à l'aide de print. Je voudrais obtenir les 50 premiers caractères de cette chaîne, c'est à dire

Лампа в вытяжке на кухне меняется, начиная с вытас.

J'ai essayé d'utiliser à la fois la substr et mb_substr, et obtenir

Лампа в вытяжке на кухне ме�, c'est à dire seulement 28 caractères.

Après avoir lu ici et d'ailleurs sur les problèmes de mbstring, je me rends compte que c'est réellement une 50 octet string (22 russe chars = 44 octets de plus de 5 places de plus 1 question de symbole).

Est-il une solution sympa pour cela? Toutes mes chaînes de caractères UTF-8, donc je pourrais bien sûr, programme un substr fonction de moi-même, par la vérification, le premier bit de chaque octet, etc. Mais cela doit sûrement avoir été fait avant, à droite?

Mise à JOUR: je crois mb_substr ne fonctionne pas correctement car mb_detect_encoding() ne fonctionne pas correctement.

Vous dites que vous avez essayé mb_substr, mais avez-vous essayé de spécifier l'encodage? Ne mb_substr($string, 0, 10, "UTF-8") par exemple, le travail?
Assurez-vous de passer le bon encodage pour mb_substr - mb_substr($input, 0, 50, 'UTF-8') fonctionne pour moi, mb_substr($input, 0, 50) ne l'est pas.
Je n'ai pas, je l'ai raté dans le manuel. Et il le fait. S'il vous plaît ajouter votre commentaire en réponse, je vais l'accepter.
Ne vous inquiétez pas à ce sujet, vous devriez plutôt accepter Abid la réponse qui me semble la façon la plus décrire et utile pour les personnes à la recherche de ce problème à l'avenir.

OriginalL'auteur texnic | 2012-09-16