login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Handige scripts > String inkorten

String inkorten

Auteur: Rik - 03 juli 2007 - 15:24 - Gekeurd door: Stijn - Hits: 7500 - Aantal punten: 4.75 (4 stemmen)




Deze funtie kort een string in en houd daarbij rekening met html tags. Html tags nemen geen ruimte in in de gereturnde string en ze worden ook niet afgebroken als de maximale lengte bereikt is. De lengte van de ingekorte string en de string waarmee die beëindigt wordt kan zelf worden bepaald.

Eigenlijk is dit een uitgebreide versie van de Afkorten functie van Joël.

Standaard wordt een lengte van 20 gebruikt en wordt er beëindigt met drie punten. Ongeldige html tags worden beveiligd (lees: gehtmlentities'd) en zo getoond. Als er geen sluit tag is gebeurt het zelfde. Het is dus nodig dat er geldige html wordt gebruikt. Deze functie is vooral te gebruiken na een ubb parser en het is niet verstandig om er invoer die rechtstreeks van een bezoeker komt mee in te korten. Hij beschermt je namelijk niet tegen XSS exploits.

Voorbeeld van gebruik:
  1. <?php
  2. $data = 'Ik zoek met <em><a href="http://www.google.nl">Google</a></em>!';
  3. echo shorten($data);
  4. ?>

Dat geeft:
Citaat:
Ik zoek met <em><a href="http://www.google.nl">Googl</a></em>...

Veel plezier met het gebruik van deze functie en als iemand nog bugs ontdekt hoor ik dat graag!

Bug fixes:
- Als de invoer al kort genoeg is worden er nu geen puntjes meer toegevoegd.

Code:
  1. <?php
  2. /**
  3.  * Functie om een string in te korten
  4.  *
  5.  * Deze funtie kort een string in en houd daarbij rekening met html tags.
  6.  * Html tags nemen geen ruimte in in de gereturnde string en ze worden
  7.  * ook niet afgebroken als de maximale lengte bereikt is. De lengte van
  8.  * de ingekorte string en de string waarmee die beëindigt wordt kan zelf
  9.  * worden bepaald.
  10.  *
  11.  * @author Rik Veenboer
  12.  * @param string $data de string die verkort moet worden
  13.  * @param int $length de lengte die de string moet krijgen
  14.  * @param string $endString de string waarmee de verkorte string beëindigt wordt
  15.  * @return string een string met de ingekorte $data
  16. **/
  17. function shorten($data, $length = 20, $endString = '...') {
  18. // De regexes voor de open en close html tags
  19. $regex = array(
  20. 'open' => '/^\<[ ]*([a-z]+)[ ]*(?:[a-z]*[ ]*\=[ ]*\"[^\"\'<>]*\")*[ ]*(\/?)[ ]*\>$/',
  21. 'close' => '/\<[ ]*\/[ ]*%s+[ ]*\>/s'
  22. );
  23. $short = '';
  24. // De lengte van de nieuwe string is inclusief de puntjes op het einde behalve als de invoer al kort genoeg is
  25. $isShortString = strlen(strip_tags($data)) <= $length;
  26. $length -= $isShortString ? 0 : strlen($endString);
  27. $free = $length;
  28. // Elk teken afgaan totdat ze op zijn of totdat er geen meer nodig zijn
  29. for ($i = 0; $i < strlen($data) && $free > 0; $i++) {
  30. // Controleren of het huidige teken een < is en of er ook nog een > achter staat
  31. if ($data{$i} == '<' && ($pos = strpos($data, '>', $i + 1)) !== false) {
  32. // De open tag in een string zetten
  33. $open = substr($data, $i, ($pos - $i + 1));
  34. // Controleren of de opentag geldig is
  35. if (preg_match($regex['open'], $open, $match)) {
  36. // Tags waarvan geen sluit tag bestaat detecteren
  37. if (isset($match[2]) && $match[2] == '/') {
  38. $short .= $open;
  39. // De pointer voorbij deze tag zetten en verder gaan
  40. $i += strlen($open) - 1;
  41. continue;
  42. }
  43. // Sluittag opzoeken
  44. if (preg_match(sprintf($regex['close'], $match[1]), substr($data, $pos), $match)) {
  45. $close = $match[0];
  46. // De waarde tussen de open en sluit tag vandaan halen en apart parsen
  47. $value = shorten(substr($data, $pos + 1, strpos($data, $close, $pos) - $pos - 1), $free, '');
  48. $free -= strlen($value);
  49. // Het geheel toevoegen aan de verkorte string
  50. $short .= $open . $value . $close;
  51. // Pointer voorbij de sluit tag zetten
  52. $i += strlen($open . $value . $close) - 1;
  53. } else {
  54. // Als er geen geldige sluit tag is gevonden voegen we open tag beveiligd toe
  55. $short .= htmlentities($open, ENT_QUOTES);
  56. $i += strlen($open) - 1;
  57. }
  58. // Ga verder met het volgende teken
  59. continue;
  60. }
  61. }
  62. // Het huidige teken beveiligd toevoegen
  63. $short .= htmlentities($data{$i}, ENT_QUOTES);
  64. $free--;
  65. }
  66. // Alleen puntjes toevoegen als de invoer langer dan de opgegeven lengte is
  67. return $short . ($isShortString ? '' : $endString);
  68. }
  69. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (6)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.05s