Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z funkcją obcinającą tekst
Forum PHP.pl > Forum > Przedszkole
charli_22
Witam

Znalazłem w książce funkcję do obcinania tekstu wyświetlanego na stronie. Chciałem przetestować jej działanie i zauważyłem jej dziwne zachowanie. Mianowicie jeśli ostatni znak w tekście jest polskim znakiem diakrytycznym, ń, ć itp to wówczas jest on zamieniany na pytajnik. Natomiast jeśli ten znak jest zwykłą literą, znakiem interpunkcyjnym to wówczas jest on pomijany.

Oto funkcja:

  1. <?php
  2.  
  3. function trimBody($theText, $lmt=500, $s_chr=" ", $s_cnt=20) {
  4. $pos = 0;
  5. $trimmed = FALSE;
  6. for ($i=1; $i <= $s_cnt; $i++) {
  7. if($tmp = strpos($theText, $s_chr, $pos+1)) {
  8. $pos = $tmp;
  9. $trimmed = TRUE;
  10. } else {
  11. $pos = strlen($theText) - 1;
  12. $trimmed = FALSE;
  13. break;
  14. }
  15. }
  16. $theText = substr($theText, 0, $pos);
  17.  
  18. if(strlen($theText) > $lmt) {
  19. $theText = substr($theText, 0, $lmt);
  20. $theText = substr($theText, 0, strrpos($theText, ''));
  21. $trimmed = TRUE;
  22. }
  23. if($trimmed) $theText .='...';
  24. return $theText;
  25. }
  26.  
  27. ?>


Macie jakieś pomysły co tu może być nie tak?

Pozdrawiam
Kicok
Problemy z UTF-8.

Po pierwsze sprawdź, czy na twoim serwerze dostępne jest rozszerzenie mbstring. Jeśli tak, to:
mb_convert_encoding" title="Zobacz w manualu PHP" target="_manual - po lewej masz spis funkcji tego rozszerzenia. Będą tam też odpowiedniki niektórych wbudowanych w PHP funkcji operujących na tekście, np.:
strlen" title="Zobacz w manualu PHP" target="_manual - mb_strlen" title="Zobacz w manualu PHP" target="_manual
substr" title="Zobacz w manualu PHP" target="_manual - mb_substr" title="Zobacz w manualu PHP" target="_manual

Teraz już tylko drobne "znajdź i zamień" w twoim skrypcie.


Drugi sposób: php.ini -> mbstring.func_overload = 1
nevt
pewnie masz kodowanie UTF-8 - czyli polskie literki zajmują więcej niż jeden bajt, musisz wymienić zwykłe funkcje 'string' na funkcje z bibliteki 'multibyte string functions', np.

strlen() => mb_strlen()
strpos() => mb_strpos()
substr() => mb_substr()

itd...
charli_22
Tak, zgadza się kodowanie mam UTF8. Ok, zaraz sprawdze te rozwiązania.
Thx

Pozamieniałem funkcje i już jest wszystko OK.
Dzięki
charli_22
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.