login  Naam:   Wachtwoord: 
Registreer je!
 Forum

html 'wegfilteren' in substr (Opgelost)

Offline Solix - 03/07/2007 10:46
Avatar van SolixNieuw lid Ik ben bezig met een blogsysteem. In dat systeem heb je aan de rechterkant een vak waar de laatste vijf berichten staan (de eerste 20 tekens ervan). En daar kun je op klikken om het te hele bericht te bekijken.

Maar, als iemand bijvoorbeeld in de eerste regel van zijn bericht, helemaal vooraan in de zin, een link heeft, dan heb je aan de rechterkant dus een link in een link. Of een tag die niet meer afgesloten wordt, etc. etc..

Ik gebruik nu:

  1. print substr($row['text'],0,20);


Binnen die substr moet hij dus alles dat tussen een '<' en een '>' staat wegfilteren, en ook niet meetellen met die 20 tekens.

Iemand enig idee hoe ik dit kan doen?

7 antwoorden

Gesponsorde links
Offline Grayen - 03/07/2007 11:08
Avatar van Grayen PHP ver gevorderde Ik zat met een zelfde soort iets, daarvoor heb ik deze functie geschreven, uiteraard kan je hem zelf aanpassen naar eigen wens. Ik had graag dat hij paragrafen in stand hield, dus heb daar rekening mee gehouden, dat kan je natuurlijk weglaten.

  1. function short($sString, $iLength)
  2. {
  3. if(strpos($sString, '<') !== false)
  4. {
  5. $sString = strip_tags(str_replace(array('<p>', '</p>', '<br/>'), array("\n\n", '', "\n"), $sString));
  6. }
  7.  
  8. $sString = (strlen($sString) > ($iLength + 20) ? substr($sString, 0, $iLength).'... ' : $sString);
  9.  
  10. $aParagraphs = explode("\n\n", $sString);
  11. foreach($aParagraphs as $i => $sParagraph)
  12. {
  13. $aParagraphs[$i] = empty($sParagraph) === false ? '<p>'.$sParagraph.'</p>' : '';
  14. }
  15. return implode('', $aParagraphs);
  16. }


En het gebruik is als volgt:

  1. $string = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
  2. print short($string, 20); // output: aaaaaaaaaaaaaaaaaaaa
Offline Anoniem - 03/07/2007 11:12 (laatste wijziging 03/07/2007 11:12)
Avatar van Anoniem PHP gevorderde Dus eigenlijk gewoon:
  1. <?php
  2. print substr(strip_tags($row['text'],0,20));
  3. ?>
Offline gothmog - 03/07/2007 11:50
Avatar van gothmog Lid Orange, dan bdl jij:
  1. <?php
  2. print substr(strip_tags($row['text']),0,20);
  3. ?>
Offline Solix - 03/07/2007 11:54
Avatar van Solix Nieuw lid Er passen geen paragrafen binnen 20 tekens. En de manier van Orange werkt ook prima (die gebruik ik, bedankt!). Maar jij ook bedankt voor je reply, Grayen!

Offline Rik - 03/07/2007 12:04 (laatste wijziging 03/07/2007 12:14)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik heb een functie gemaakt die tekst inkort, maar wel html tags laat staan:
  1. <?php
  2. function shorten($data, $length = 20, $endString = '...') {
  3. $regex = array(
  4. 'open' => '/\<[ ]*([a-z]+)[ ]*(?:[a-z]*[ ]*\=[ ]*\"[^\"\']*\")*[ ]*\/?[ ]*\>/',
  5. 'close' => '/\<[ ]*\/[ ]*%s+[ ]*\>/s'
  6. );
  7. $short = '';
  8. $length -= strlen($endString);
  9. $free = $length;
  10. for ($i = 0; $i < strlen($data) && $free > 0; $i++) {
  11. if ($data{$i} == '<' && ($pos = strpos($data, '>', $i + 1)) !== false) {
  12. $open = substr($data, $i, ($pos - $i + 1));
  13. $i = $pos;
  14. if (preg_match($regex['open'], $open, $match) && preg_match(sprintf($regex['close'], $match[1]), substr($data, $pos), $match)) {
  15. $close = $match[0];
  16. $value = shorten(substr($data, $i + 1, strpos($data, $close, $i) - $i - 1), $free, '');
  17. $i = strpos($data, $close, $i) + strlen($close) - 1;
  18. $free -= strlen($value);
  19. $short .= $open . $value . $close;
  20. continue;
  21. }
  22. }
  23. $short .= $data{$i};
  24. $free--;
  25. }
  26. return $short . $endString;
  27. }
  28. $data = '<em>Zoek met <a href="http://www.google.nl"><b>Google</b></a>!</em>';
  29. echo shorten($data, 20);
  30. ?>

Als het goed is worden zo'n beetje alle html tags ondersteund! 

Edit:
PHP-tags vergeten. 
Offline Solix - 03/07/2007 14:44
Avatar van Solix Nieuw lid dankjewel, kan ik misschien nog gebruiken! 
Offline Anoniem - 03/07/2007 19:00
Avatar van Anoniem PHP gevorderde @gothmog
Je hebt gelijk, een typefoutje.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.231s