Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Liczenie słów w zmiennej
Forum PHP.pl > Forum > Przedszkole
Lethys
Witam,

Chciałbym się dowiedzieć jak poprawnie liczyć słowa w zmiennej.

Obecnie używam strlen ale problem w tym, że jakoś błędnie mi liczy słowa. Podejrzewam, że inaczej są liczone polskie znaki. Tak, wiem, że spacje są również liczone.


  1.  
  2. <input type="text" name="nazwa" maxlength="28" class="mws-textinput"/>
  3.  
  4. $liczenie = strlen($_POST['nazwa']);
  5. if (28 < strlen($_POST['nazwa'])) {
  6. echo 'Wpisałeś za dużo znaków, wpisałeś: $liczenie znaków';
  7. }
  8.  


Taki prosty kod, mimo że w formularzu mi zablokuje opcję pisania więcej niż 28 znaków i rzeczywiście będzie wpisane 28 znaków to fukcja strlen zwróci, że tych znaków jest więcej.

Kiedy wpisałem same polskie znaki w formularzu (np. śćłóśćłóśćłóśćłóśćłóśćłó) to $liczenie mi pokazało ponad 40 znaków.
!*!
To znaków czy słów?
Niktoś
Cytat
Kiedy wpisałem same polskie znaki w formularzu (np. śćłóśćłóśćłóśćłóśćłóśćłó) to $liczenie mi pokazało ponad 40 znaków.

Daj sobie echo na $liczenie i zobacz w ogóle,czy wyświetla Ci te polskie znaki ,na moje oko to możesz mieć problemy z kodowaniem.
Lethys
No jasne, że wyświetla bo dane z formularza z polskimi znakami bez problemu są dodawane do bazy. Jedyny problem polega na tym błędnym liczeniu znaków.
adamec
a sprawdź funkcje count() potraktuj stringa jako tablice. jaki da wynik ?
!*!
Ponieważ sterlen zwraca bajty, co nie będzie równoznaczne dla PL znaków względem ich faktycznej ilośći. Możesz zrobić coś takiego:

  1. strlen(utf8_decode('zxcó'))


Lub poczytaj komentarze na php.net odnośnie tej funkcji. Jest tam kilka przykładów.
redeemer
Albo użyć mb_strlen()
adamec
albo mb_strlen()
Lethys
Cytat(!*! @ 18.04.2012, 12:56:25 ) *
Ponieważ sterlen zwraca bajty, co nie będzie równoznaczne dla PL znaków względem ich faktycznej ilośći. Możesz zrobić coś takiego:

  1. strlen(utf8_decode('zxcó'))


Lub poczytaj komentarze na php.net odnośnie tej funkcji. Jest tam kilka przykładów.


Ten sposób działa, dzięki smile.gif

próbowałem też z mb_strlen() ale dawało niestety różne wyniki czesto za duże jak w przypadku strlen.

redeemer
Cytat(Lethys @ 18.04.2012, 15:23:16 ) *
próbowałem też z mb_strlen() ale dawało niestety różne wyniki czesto za duże jak w przypadku strlen.
Bo musisz podać do tej funkcji drugi argument - kodowanie. W twoim wypadku mb_strlen($string, 'UTF-8'); mb_strlen jest jakieś 25% szybsze niż strlen + utf8_decode.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.