[ 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 :-) |
[ noviKorisnik @ 08.03.2006. 16:18 ] @
[ 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. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|