webForumDet fria alternativet

Hur begränsar jag antalet ord eller tecken?

PHP

15 svar · 1 098 visningar · startad av Danne V

Medlem sedan aug. 20068 090 inlägg
Frågan#1

Har denna snutt:

			if($this->description)
				echo "$this->description";

och skulle vilja begränsa texten som genereras.
Vet nada om php men gissar att function limit_text ska in.
Men var? Och hur?

Medlem sedan aug. 20039 340 inlägg
#2
            if($this->description) 
                echo limit_text("$this->description");

?

Sen verkar inte denna limit_text vara en standardfunktion i PHP, utan måste definieras någonstans om den inte redan finns i koden. Då måste du hitta ett bra ställe att placera funktionen på. Det beror helt på hur kodbasen är utformad. Det kanske t ex finns en fil som heter functions.php eller liknande som inkluderas till alla sidor, där du ska lägga alla funktioner. Eller så bör den ligga någon annanstans. Ett annat problem är om $this->description kan innehålla t ex HTML, som kapas av på mitten av limit_text osv.

Medlem sedan jan. 2005953 inlägg
#3

Är det funktionen substr() du söker?

Medlem sedan aug. 20068 090 inlägg
#4

metalboy skrev:

Är det funktionen substr() du söker?

Kanske. När jag sökt så har den dykt upp också.
Har testat lite olika. Men, som sagt, jag vet nada om php. :r
Skulle gärna posta all kod, men snubben som satte ihop skriptet åt mig för 6-7 år sen vill inte gärna att den plötsligt blir allmän egendom.

Medlem sedan jan. 2005953 inlägg
#5

Okej, säg att du vill skriva ut de 10 första tecknen i en sträng, då gör du på följande sätt:

<?php
$string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ';

echo substr($string, 0, 10); // ABCDEFGHIJ

Notera att denna funktion inte tar hänsyn till om du har någon HTML-kod i strängen.
Se följande exempel

<?php
$string = '<b>Fetstilt text</b>';
echo substr($string, 0, 18); // <b>Fetstilt text</

Kolla gärna igenom exemplen i manualen.

Medlem sedan aug. 20068 090 inlägg
#6

metalboy skrev:

Okej, säg att du vill skriva ut de 10 första tecknen i en sträng, då gör du på följande sätt:

<?php
$string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ';

echo substr($string, 0, 10); // ABCDEFGHIJ

Notera att denna funktion inte tar hänsyn till om du har någon HTML-kod i strängen.
Se följande exempel

<?php
$string = '<b>Fetstilt text</b>';
echo substr($string, 0, 18); // <b>Fetstilt text</

Kolla gärna igenom exemplen i manualen.

Har laborerat med detta tidigare idag. Men förstår inte hur jag ska lägga in funktionen i koden ovan, dvs denna:

 if($this->description) 
                echo "$this->description";
Medlem sedan jan. 2005953 inlägg
#7
if($this->description)
    echo substr($this->description, 0, 10); // Skriver ut de 10 första tecknen
Medlem sedan aug. 20068 090 inlägg
#8

metalboy skrev:

if($this->description)
    echo substr($this->description, 0, 10); // Skriver ut de 10 första tecknen

Funkar kanon! Lyckades t.o.m. lägga till tre punkter efter... :)
Tackar & bockar för hjälpen!

Medlem sedan aug. 20068 090 inlägg
#9

Kanske överkurs. Men hur klipper man texten utan att kapa orden?

Medlem sedan jan. 2005713 inlägg
#10

Kanske går att skriva en snyggare lösning

if($this->description) 
    {
		$td = explode(substr($this->description, 0, 10), $this->description);
		list($plus) = explode(" ", $td[1]);
		echo substr($this->description, 0, 10).$plus;
	}
Medlem sedan jan. 2005953 inlägg
#11

Kolla t.ex. den här funktionen: http://se2.php.net/manual/en/function.substr.php#93963

Medlem sedan aug. 20068 090 inlägg
#12

stattin skrev:

Kanske går att skriva en snyggare lösning

if($this->description) 
    {
		$td = explode(substr($this->description, 0, 10), $this->description);
		list($plus) = explode(" ", $td[1]);
		echo substr($this->description, 0, 10).$plus;
	}

Ser snyggt ut. :)
Men var/hur lägger jag in detta i befintligt kod?

Testat. Funkar skitbra! :) Takkar takkar..
(nu kan man ju inte markera TVÅ svar som dom rätta, så du få nöja dig med ett tack!)

Medlem sedan aug. 20068 090 inlägg
#13

metalboy skrev:

Kolla t.ex. den här funktionen: http://se2.php.net/manual/en/function.substr.php#93963

Har kollat en mängd varianter, inte minst på php.net.
Problemet är alltså att jag inte vet skit om php. :r

Medlem sedan jan. 2005953 inlägg
#14

Skulle du vilja använda dig av funktionen från kommentarerna i manualen så kan du göra så här:

<?php
function _substr($str, $length, $minword = 3)
{
    $sub = '';
    $len = 0;
   
    foreach (explode(' ', $str) as $word)
    {
        $part = (($sub != '') ? ' ' : '') . $word;
        $sub .= $part;
        $len += strlen($part);
       
        if (strlen($word) > $minword && strlen($sub) >= $length)
        {
            break;
        }
    }
   
    return $sub . (($len < strlen($str)) ? '...' : '');
}

// ... en massa annan kod

if($this->description)
    echo _substr($this->description, 10);
Medlem sedan aug. 20068 090 inlägg
#15

metalboy skrev:

Skulle du vilja använda dig av funktionen från kommentarerna i manualen så kan du göra så här:

Schysst! Men Stattins svar (ovan) funkade.
Jag är oerhört tacksam för hjälpe du (och andra) har gett. (y) (y) (y)

Medlem sedan jan. 2005713 inlägg
#16

Danne V skrev:

Ser snyggt ut. :)
Men var/hur lägger jag in detta i befintligt kod?

Testat. Funkar skitbra! :) Takkar takkar..
(nu kan man ju inte markera TVÅ svar som dom rätta, så du få nöja dig med ett tack!)

Tack tack!
Men som sagt kanske inte det snyggaste eller smidigaste lösningen.
Fast egentligen finns det ju ingen riktigt lösning på detta om man inte har en inbyggd ordlista
Skulle det glömmas ett mellanslag (fast hur ofta händer det) så kan ju resultat bli något längre än vad man skulle vilja.

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)