Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] skracanie zmiennej
Forum PHP.pl > Forum > PHP
jagwie
Witam potrzebuje pomocy w skróceniu zmiennej na przykład do 20 znaków
Moja zmiena wygląda tak
  1. $opis = $wynik['opis_obiektu'];
mrc
  1. <?php
  2. $skrocona_zmienna = substr($zmienna_do_skrocenia, 0, 20);
  3. ?>
thek
mb_substr, bo zwykłe substr i polskie znaki to złe połączenie, bo diakrytyczne jak ą, ś są ucinane "w połowie" (są zapisane na 2 bajtach, a substr uznaje za literę 1 bajt).
jagwie
Zrobiłem to tak
  1. $opis = mb_substr($opis, 0, 250);
  2. $opis = $opis.'...';

A jak zrobić aby nie ucinało w połowie wyrazu
mrc
Do tego aby nie ucinało w połowie wyrazu, musisz zrobić własną funkcję... albo skorzystać z systemu szablonowania, np. Smarty, on ma modyfikator kontrolujący to smile.gif
IceManSpy
Musisz sprawdzić, czy przycinając np do 20 znaków, to czy ten ostatni jest literą. Jak tak, to musisz się cofnąć albo przesunąć do przodu do spacji albo.
flashdev
Cytat(jagwie @ 8.08.2010, 11:45:10 ) *
[...]
A jak zrobić aby nie ucinało w połowie wyrazu


Kawałek jednego z moich projektów, proszę bardzo:

  1. function getShortcut($str, $max = 100){
  2. $res = mb_substr($str, 0, $max);
  3. $pos = mb_strripos($res, ' ');
  4. $res = mb_substr($res, 0, $pos);
  5. return rtrim($res, " \n\r\t.,():;<>") . (mb_strlen($res) < mb_strlen($str) ? '...' : '');
  6. }
jagwie
Wywala mi błąd
Fatal error: Cannot redeclare getshortcut() (previously declared in
  1.  
  2. function getShortcut($opis, $max = 100){
  3.  
  4. $res = mb_substr($opis0, $max);
  5.  
  6. $pos = mb_strripos($res, ' ');
  7.  
  8. $res = mb_substr($res, 0, $pos);
  9.  
  10. return rtrim($res, " \n\r\t.,():;<>") . (mb_strlen($res) < mb_strlen($opis) ? '...' : '');
  11.  
  12. }
flashdev
Z tego co piszesz wynika, ze masz już gdzieś w kodzie funkcje o tej nazwie.

Edit:
To jedno, a drugie to już widzę, ze nieudolnie przerobiles moje funkcje. Tak własnie, teraz ona nie będzie działać.
jagwie
Zmieniam nazwę lecz jest to samo
Fifi209
Cytat(flashdev @ 8.08.2010, 12:02:13 ) *
To jedno, a drugie to już widzę, ze nieudolnie przerobiles moje funkcje. Tak własnie, teraz ona nie będzie działać.


Cytat(jagwie @ 8.08.2010, 12:08:14 ) *
Zmieniam nazwę lecz jest to samo


Hmm? Już przy pierwszym mb_substr zepsułeś jego funkcję.
flashdev
Cytat(fifi209 @ 8.08.2010, 13:10:35 ) *
Hmm?


$opis != $opis0
jagwie
poprawiłem lecz dalej to samo



  1. function getShortcut($opis, $max = 100){
  2.  
  3. $res = mb_substr($opis, 0, $max);
  4.  
  5. $pos = mb_strripos($res, ' ');
  6.  
  7. $res = mb_substr($res, 0, $pos);
  8.  
  9. return rtrim($res, " \n\r\t.,():;<>") . (mb_strlen($res) < mb_strlen($opis) ? '...' : '');
  10.  
  11. }
flashdev
Cytat(jagwie @ 8.08.2010, 13:49:32 ) *
poprawiłem lecz dalej to samo


Bo nie pofatygowałeś się nawet, żeby przeczytać mój post.

  1. function j6El0Rgema1uLNO8NVnT($str, $max = 100){
  2. $res = mb_substr($str, 0, $max);
  3. $pos = mb_strripos($res, ' ');
  4. $res = mb_substr($res, 0, $pos);
  5. return rtrim($res, " \n\r\t.,():;<>") . (mb_strlen($res) < mb_strlen($str) ? '...' : '');
  6. }
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.