Autor | Zpráva | ||
---|---|---|---|
Michal5 Profil * |
#1 · Zasláno: 25. 7. 2014, 16:53:41 · Upravil/a: Michal5
Ahojte, vedeli by ste mi pomoct s touto funkciou? Funkcia mi nejaky string ktory obsahuje nejaku vetu rozlozi na slova podla podmienky dlzky slova do pola, problem je ze s diakritikou ma problem a uz nad tym sedim par hodin a nedari sa mi zistit v com by mohol byt problem:
function extractCommonWords($string){ $string = preg_replace('/\s\s+/i', '', $string); $string = trim($string); $string = strtolower($string); preg_match_all('/\b.*?\b/i', $string, $matchWords); $matchWords = $matchWords[0]; foreach ( $matchWords as $key=>$item ) { if ( $item == '' || strlen($item) <= 3 ) { unset($matchWords[$key]); } } $wordCountArr = array(); if ( is_array($matchWords) ) { foreach ( $matchWords as $key => $val ) { $val = strtolower($val); if ( isset($wordCountArr[$val]) ) { $wordCountArr[$val]++; } else { $wordCountArr[$val] = 1; } } } arsort($wordCountArr); $wordCountArr = array_slice($wordCountArr, 0, 10); return $wordCountArr; } //zistil som ze pri kodovani win-1250 to funguje, takze zjavne asi musim v tej funkcii pracu s utf8? lebo ak si vypisem samotny string a mam nastavene spravne kodovanie, tak sa diakritika zobrazuje, rozhodi ju az ta funkcia |
||
Keeehi Profil |
#2 · Zasláno: 25. 7. 2014, 20:24:45
Nechce se mi studovat tvůj kód, ale z popisu jsem si na 99% jistý že vím, kde je problém.
UTF-8 na rozdíl od win-1250 je multibytové kódování. Pro kódování různých znaků používá různý počet bytů. Pro "c" je to jeden, pro "č" jsou to 2. V jednoduchosti vrací funkce strlen počet bytů, které zabírá řetězec v paměti a vůbec se nezabývá obsahem. Řešení je jednoduché, používat funkce mb_* které jsou určené pro práci s řetězci v multibytovém kódování. |
||
Časová prodleva: 10 let
|
0