Begræns længde af tekst

Tags:    php

Kære brugere

Jeg har en lille opgave, som jeg håber I kan hjælpe mig med.

Jeg ønsker en php (eventuelt css) kode som kan begrænse antallet af bogstaver i en tekst.

Den praktiske årsag er følgende: Jeg har et nyhedssystem, hvor jeg kan hive teksten af en nyhed ud med en lille kommando.
Et andet sted på siden vil jeg gerne vise et udsnit af denne nyhed - men altså ikke hele teksten. Jeg forestiller mig f.eks., at jeg vil vise de første 50 tegn.

Hvordan kan dette løses?

På forhånd tak.



8 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
$nyhed = "Dette er den variable som indeholder hele din nyhed!";
//udskriv udsnit, altså kun de første 50 tegn
echo substr($nyhed, 0, 50);

en lille detalje ville nok være at sætte ... bare ved, som fx her:

echo "".substr($nyhed, 0, 50)."...";



Morten, så mangler det lige og se rigtigt ud =)

echo substr($nyhed, 0, 50).'...';

forstår ikke hvorfor du satte "" i starten, det er altså ikke fordi ens PHP er dum til at sige hvad den skal echo.
jeg ville måske lavet en function

Fold kodeboks ind/udKode 


Brug:
<?=wordlimit($row['indhold'], 50)?>

indhold er indholdet af din nyhed/blog og 50 er hvor mange tegn som må være med.



Indlæg senest redigeret d. 07.05.2007 16:32 af Bruger #11553
En anden metode er kun at hente de data fra databasen man har brug for ved hjælp af mysql's substring funktion.

Et eksempel:

Fold kodeboks ind/udKode 




David, i følge (X)HTML ville den være forkert.

Rigtig: <textarea style="border:0;cursor:default;overflow:hidden;" cols="50" rows="3" readonly="readonly"></textarea>

Men det vil kun give 50 chars på hver row, det vil sige at jeg kan skrive mere end 3 rows ville der komme en nye linje med mulighed for at scroll nu. ;)

Jeg regner med at han vil havde et form for read more nyheds/blogs system ;)


Mht XHTML - de korrektioner du angiver readonly=readonly + gåseøjne er naturligvis korrekte, men hvor var det nu liiige jeg påstod det var XHTML-kompatibelt?

Og ellers - overflow:hidden skjuler netop scrollbaren og forhindrer nedscrolling hvis flere linier går ud over rammen - som eksemplet med mange liniers tekst havde til hensigt at demonstrere. (Paste det ind i notepad, og vis html-filen med IE - prøv selv inden du brokker dig :-))

Desværre - og det er jo virkelig en brøler - havde jeg kun prøvet med IE - opera/FF viser, totalt i strid med overflow:hidden den resterende tekst. Safari skjuler (som IE) resterende tekst og scrollbar. Opera har generelt haft problemer med overflow (i hvert fald historisk) og det er én af de få ting IE gennem tiderne har gjort korrekt :-)

Hvis man gerne vil bruge løsningen, kan man bruge en <div> i stedet, men hele pointen med at "løse" problemet i HTML og ikke php/sql går jo af fløjten, hvis det alligevel renderes forskelligt i de forskellige browsere.

Så det svar var rigtig nok ikke godt :-(






Alternativt - for den dovne - kan man vise teksten i et readonly <textarea>

<textarea style='border:0;cursor:default;overflow:hidden;' cols=50 rows=3 readonly>

Et tibi quidem, domine, cuius oculis nuda est abyssus humanae conscientiae, quid occultum esset in me, etiamsi nollem confiteri tibi? te enim mihi absconderem, non me tibi. nunc autem quod gemitus meus testis est displicere me mihi, tu refulges et places et amaris et desideraris, ut erubescam de me et abiciam me atque eligam te, et nec tibi nec mihi placeam nisi de te. tibi ergo, domine, manifestus sum, quicumque sim.

</textarea>

viser enhver tekst på helt samme måde, uanset længden - velegnet at bruge hvor bevarelse af f.eks elementernes højde spiller en afgørende rolle for designet. Cols/Rows (evt height/width i CSS) skal så sættes så størrelsen mather det forventede.

Hvis nyhederne (eller hvad det var) ikke er alt for lange, kan det godt anbefales. Her klares "problemet" på klienten i ren HTML - der er altid et tidstab med PHP, og et endnu større tidstab med SQL. Hiv nyhederne ud én gang, og gem dem i en variabel/array - genbrug teksten overalt og lad designet om at "klippe"






David, i følge (X)HTML ville den være forkert.

Rigtig: <textarea style="border:0;cursor:default;overflow:hidden;" cols="50" rows="3" readonly="readonly"></textarea>

Men det vil kun give 50 chars på hver row, det vil sige at jeg kan skrive mere end 3 rows ville der komme en nye linje med mulighed for at scroll nu. ;)

Jeg regner med at han vil havde et form for read more nyheds/blogs system ;)



David, det samme gælder for rasmus ang. XHTML. =)
Vi ved ikke hvad om han koder i HTML eller XHTML, men ja. Jeg vil holde mig til PHP løsning, da den også kan bruges til output i metatags og andet.

Er nemlig gået igang med at læse på SEO, takket være en ven.

for dem der ikke lige kan huske hvad SEO er > http://en.wikipedia.org/wiki/Search_engine_optimization



Tak for de mange gode svar. Så er der lidt at arbejde med.

Jeg har kigget lidt på det, og umiddelbart passer løsningen med PHP substr bedst til formålet.

Endnu en gang tak.



t