[PHP] tekst wrap - afbreken van woorden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Voor de agenda op mijn website wil ik een aantal woorden laten zien.

Ik haal de tekst uit de database en vervolgens wil ik deze beperken tot een aantal woorden met een paar '...' erachter.

code:
1
2
3
4
5
6
7
8
9
10
11
12
$bericht = $row2["bericht"];

function wrap($bericht,$offset,$continue = "..") {
  preg_match("/^(.{0," . (int) $offset . "})\s(.+)$/", $bericht, $matches);
  if (isset($matches[1])) {
    return $matches[1] . $continue;
  } else {
    return $matches[0];
  }
}

print wrap($bericht,20);


Hiermee krijg ik geen output.

Wat mis gaat is dat hij het aantal woorden niet bekijkt. Hij kijkt niet naar het aantal karakters.

Als ik de variabele definieer doet hij het wel goed, bijv:
code:
1
$bericht = 'test test test test test test test';


Output: test test test test..

De bedoeling is dat het aantal karakters van de variabele uitleest.. maar op 1 of andere manier krijg ik dat niet voorelkaar.

Pura Vida


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Heb je uberhaupt al gedebugged? Als het wél werkt met $bericht = 'blabla' en niet met $bericht = $row2 dan lijkt het me meer dan duidelijk waar je probleem in zit.

Debuggen: Hoe doe ik dat?

Daarbij: WTF? Een regex om berichten af te kappen op lengte? :X

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
en welke waarde heeft $row2["bericht"]?

Sowieso vind ik het een vreemde regex.. Gebruik gewoon substr ofzo :s?

[ Voor 34% gewijzigd door link0007 op 06-03-2009 00:31 . Reden: nog niet helemaal wakker ]

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

Verwijderd

wat dacht je hier van?


function dec_str($line, $len)
{
if (strlen($line) > $len)
$afgekort = substr($line, 0, $len) . "..";
else
$afgekort = $line;

return ($afgekort);
}

Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 19:39
link0007 schreef op vrijdag 06 maart 2009 @ 00:29:
En tja, dan krijg je natuurlijk nog de WTF van inderdaad regex gebruiken :+

Gebruik gewoon substr ofzo :s?
Met alleen substr ben je er niet natuurlijk, tenminste, niet als je alleen op een spatie wilt afkappen.
Verwijderd schreef op vrijdag 06 maart 2009 @ 00:31:
wat dacht je hier van?


function dec_str($line, $len)
{
if (strlen($line) > $len)
$afgekort = substr($line, 0, $len) . "..";
else
$afgekort = $line;

return ($afgekort);
}
Dan kap je de tekst dus middenin een woord af.

Je komt al snel op zoiets uit:

PHP:
1
2
3
4
5
6
7
8
9
function wrap($bericht,$offset,$continue = "..") {

  if (strlen($bericht) > $offset) {
    $bericht = substr($bericht, 0, strrpos(substr($bericht, 0, $offset), ' ')) . $continue;
  }

  return $bericht;

}

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
of als je echt wilt wrappen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function oneWordwrap($string,$maxWidth,$break)
{
    $wordList=explode(' ', $string);
    $replacementList=array();
    foreach ($wordList as $word) 
    {
        if(strlen($word)>$maxWidth)
        {
            $word=wordwrap($word, $maxWidth, $break, true);
        }
        $replacementList[]=$word;       
    }
    $newString = implode(' ',$replacementList);
    
    return $newString;
}

Dus alleen te lange woorden afkappen door er een teken tussen te zetten (bijvoorbeeld &shy;)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Bedankt voor de hulp! Deze oplossingen werken idd ook goed.

Kom er wel achter dat als er een break in de tekst zit het niet goed werkt. In de agenda had ik een aantal regels afgebroken met een line-up (achter elke artiestst een <br/> en daardoor kwam werkte het niet.

Pura Vida

Pagina: 1