[ noviKorisnik @ 08.03.2006. 16:18 ] @
Jedno prosto pitanje - kako iz utf8 enkodiranog stringa napraviti niz svih reči od bar 3 karaktera?

(... možda je i odgovor jednostavan, ali bih ga voleo videti svakako :-)
[ tiranin @ 08.03.2006. 17:06 ] @
Pitanje nije prosto, jer bar meni nije do kraja jasno. Sta znaci utf8 enkodirani string?
String je niz karaktera is nekog skupa (tvoj alfabet), a utf8 enkodiranje je standard po kome se neki karakteri smestaju u 1 bajt, neki u 2, a neki u 3 bajta.
Ako je tvoj string skup karaktera, povadis karaktere, odradis varijacije od 3 elementa (2-3 petlje) i to je to. Ako te iz tvog stringa zanimaju bajtovi, onda pojedinacni bajt je mozda deo dvobajtnog utf8 karaktera, ne znaci nista, pa je glupo da s njim bilo sta radis.
Sta je tebi problem ? Substringovanje stringa koji ima utf8 karaktere, ili algoritam pravljenja varijacija od 3 ili vise elemenata ?
[ Br@nkoR @ 08.03.2006. 17:31 ] @
Hm...
http://www.php.net/mbstring
npr.
Code:

mb_internal_encoding("UTF-8");
$string = 'ово Ñ˜Ðµ Ñ‚ест Ð±Ñ€Ðµ Ð°Ð°Ð° Ð°Ð°';
$word_array = split(' ',$string);
for ($i=0; $i<count($word_array); $i++) {
  if (mb_strlen($word_array[$i]) >= 3) {
    echo $word_array[$i].'<br />';
  }
}
[ noviKorisnik @ 08.03.2006. 21:51 ] @
Da, izgleda da bi moralo preko mbstringa, do toga sam i sam došao, ali još uvek nisam našao način kako da to efikasno rešim.

Recimo, probao sam...
Code:
preg_match_all ('/\w{3,}/', $string, $matches);

... i to je super, onaj rezultat koji mi treba, osim ako u igru ulaze i utf8 karakteri, recimo domaća latinica ili ćirilica ... onda ovo ne funkcioniše kako valja.

E sad, koliko razumem, mb_eregi kao i eregi vraća samo prvo nalaženje patterna, baš kao i preg_match, ali meni treba ponašanje kao za preg_match_all - znači svi rezultati u nizu.

Druga stvar je što ove funkcije izgleda ne priznaju foru "\w", a ja ne znam kako da predstavim skup svih mogućih karaktera koji bi da predstavljaju cifru ili slovo, ili sve one karaktere koje ne bi bili u tom skupu (beline, specijalni karakteri i šta još) ako bi koristio mb_split ...

(... postaviću ovo i na dpt, valjda bude neke koristi ...
[ bzero @ 09.03.2006. 08:54 ] @
Citat:
noviKorisnik:

Code:
preg_match_all ('/\w{3,}/', $string, $matches);



Tvoj problem je u stvari sto \w ne radi za utf-8. U ovakvim slucajevima mozes da definises karaktere koji te zanimaju. Konkretno za cirilicu, radi se o unikod karakterima 0400-04FF, tako da ce ovo:

Code:

preg_match_all('/[\x{0400}-\x{04FF}]{3,}/u', $string, $matches);



raditi isto sto i ono sto si ti napisao, samo za cirilicu.
Hope this helps.