Beh, si, se usi substr per tagliare e prendi il primo byte di un carattere che ne ha due lo tagli, cosi come se usi strtoupper, strtolower, ucwords, ucfirst e compagnia bella ... possono succedere drammi e distruzioni di vario genere!

La codifica UTF-8 funziona che se N bit stanno impostati su 1 in un dato byte vuol dire che il successivo fa parte dello stesso carattere, ma con funzioni come strtoupper, strtolower e simili, che alterano il byte, ovviamente succede un gran casino perché quei N bit che vengono cercati non ci stanno più e non funziona più nulla.

Dai un occhio qua
http://www.nicknettleton.com/zine/ph...f-8-cheatsheet (consigli e suggerimenti per usare utf-8)
http://www.joelonsoftware.com/articles/Unicode.html (ti spiega come funzionano le codifiche unicode e simili, ergo utf8, utf16, utf32)
http://www.sitepoint.com/blogs/2006/...hp-utf-8-tips/
http://www.sitepoint.com/blogs/2006/...-guide-slides/
http://www.sitepoint.com/blogs/2006/...hp-utf-8-tips/

In realtà scriversi un set di funzioni che badi a queste informazioni è molto semplice perché se un dato carattere utilizza più byte si c'è ne accorge confrontando il singolo byte con uno preimpostato. Ad esempio il primo byte nel caso di 2 byte per carattere è una a accentata, se la si trova vuol dire che il carattere non può essere trattato normalmnete.

Ci sono alcune librerie, FOLLI, che per fare queste operazioni convertono le stringhe in degli array, ma potete immaginare il carico portato da ciò (cosa non indifferente)!!!

Se non potete usare le mb* vi conviene cercare qualche libreria o usare dei semplici trucchetti per evitare problemi Ad esempio, personalmente, quando devo tagliare il testo per evitare che superi una data lunghezza lo taglio a parole, cosa che non causa problemi con l'utf8, cosi come se devo rendere tutto minuscolo un testo non lo uso poi per gli inserimenti o visualizzazioni e nel caso di ucwords e ucfirst li uso di rado ed in genere su singole parole che non contengono caratteri utf8 ... certo ... è pericoloso perché se a qualcuno viene il firticchio il carattere si corrompe, ma per quello che mi serve con questi giochini semplici mi evito problemi.

Mi sto scribacchiando una libreria per gestire le stringhe utf8 in modo umano, ma in realtà ne esistono di già pronte!
http://sourceforge.net/project/showf...roup_id=142846
http://cow.neondragon.net/index.php/660-Php-Utf8