Funkcja str_word_count() zwraca tablicę zawierającą wszystkie słowa w łańcuchu. Działa świetnie, z wyjątkiem sytuacji, gdy używasz znaków specjalnych. W takim przypadku, skrypt php odbiera ciąg poprzez kwerendy:Obsługa znaków specjalnych za pomocą str_word_count()
podczas otwierania: http://localhost/index.php?q=this%20wórds
header('Content-Type: text/html; charset=utf-8');
print_r(str_word_count($_GET['q'],1,'ó'));
Zamiast powrotu:
[0] this
[1] wórds
... powraca:
[0] this
[1] w
[2] rds
W jaki sposób ta funkcja może obsługiwać znaki specjalne t kapelusz jest wysyłany przez zapytanie?
Aktualizacja - wyszło dobrze używając mario 's rozwiązanie:
function sanitize_words($string) {
preg_match_all("/\p{L}[\p{L}\p{Mn}\p{Pd}'\x{2019}]*/u",$string,$matches,PREG_PATTERN_ORDER);
return $matches[0];
}
To też zadziałało. Jaka byłaby różnica między pierwszym i drugim wyrażeniem regularnym? Nie mogę zmusić drugiej do pracy. – andufo
Drugie pozwoliłoby, aby rzeczy takie jak "nie" były liczone jako pojedyncze słowo. Pełne wyrażenie regularne to oczywiście '/ [\ pL '] +/u''. Istnieje inna wersja w podręczniku http://de.php.net/manual/en/function.str-word-count.php#85592, która prawdopodobnie obejmuje wszystkie inne warianty typograficzne tego, co powinno być uważane za słowo. – mario
"/ \ p {L} [\ p {L} \ p {Mn} \ p {Pd} '\ x {2019}] */u" - dziękuję! – andufo