| 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: 12 let
|
|||
0