Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Problem z funkcją obcinającą tekst
charli_22
post 11.03.2008, 14:05:38
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował charli_22 11.03.2008, 14:08:56


--------------------
Test-Com - blog o testowaniu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Kicok
post 11.03.2008, 14:22:16
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
nevt
post 11.03.2008, 14:26:27
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
charli_22
post 11.03.2008, 14:39:36
Post #4





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 10.03.2008

Ostrzeżenie: (0%)
-----


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


--------------------
Test-Com - blog o testowaniu
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:47