login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Handige scripts > inkorten van string met behoudt van valide html

inkorten van string met behoudt van valide html

Auteur: Grayen - 06 juli 2007 - 16:34 - Gekeurd door: Stijn - Hits: 3368 - Aantal punten: 4.25 (2 stemmen)




Naar aanleiding van het volgende script..

http://www.site...mp;id=1335

.. heb ik dit script gemaakt. Het idee van Boukefalos vond ik erg slim, maar toen ik het ging testen op mijn script kreeg ik de volgende output.

  1. <div class="contents">&lt;h2&gt;test&lt;/h2&gt;<p>Lorem ipsum dolor sit amet consectetuer adipiscing hac augue Ut Nulla. Nulla
  2. at elit et tortor Phasellus volutpat feugiat tempor Morbi id. Pellentesque
  3. Mauris Sed leo tellus ipsum </p></div>...


Wat ik erg jammer vond, want <h2> is een valide tag en die puntjes vindt ik dat ze achter het woord "ipsum" zouden moeten komen. Na zijn de code te hebben gebestudeerd heb ik mijn eigen variant van zijn idee geschreven die wel de output geeft die ik wilde hebben, namelijk zoals hieronder.

  1. <div class="contents"><h2>test</h2><p>Lorem ipsum dolor sit amet consectetuer adipiscing hac augue Ut Nulla. Nulla
  2. at elit et tortor Phasellus volutpat feugiat tempor Morbi id. Pellentesque
  3. Mauris Sed leo tellus ipsum vel tincidun...</p></div>

Code:
  1. <?php
  2. function short($sString, $iLength, $sAfter = '... ')
  3. {
  4. if(strpos($sString, '<') !== false && $iLength != strlen(strip_tags($sString)))
  5. {
  6. # De lengte van string.
  7. $iTotal = strlen($sString);
  8.  
  9. # Alle open tags.
  10. $aOpenTags = array();
  11.  
  12. # De verkorte string.
  13. $sNew = '';
  14.  
  15. for($i = 0; $i < $iTotal; $i++)
  16. {
  17. # Haalt het huidige karakter op.
  18. $s = $sString{$i};
  19.  
  20. # We hebben te maken met een mogelijke tag.
  21. if($s == '<' && ($iPos = strpos($sString, '>', $i)) !== false)
  22. {
  23. # Haal de tag op.
  24. $sTag = substr($sString, $i, $iPos - $i + 1);
  25.  
  26. # Kijken of het een open of gesloten is.
  27. if($sTag{1} == '/') # Sluit tag.
  28. {
  29. # Haalt de tag naam uit de tag.
  30. if(($iEndPos = strpos($sTag, ' ')) !== false || ($iEndPos = strpos($sTag, '>')) !== false)
  31. {
  32. $sTagName = substr($sTag, 2, $iEndPos - 2);
  33.  
  34. # Als de sluitende tag gelijk is aan degeen die op dat moment open is, haal hem uit de array.
  35. if($sTagName == end($aOpenTags))
  36. {
  37. array_pop($aOpenTags);
  38. }
  39. }
  40. }
  41. else if($sTag{strlen($sTag) - 2} != '/') # Open Tag.
  42. {
  43. # Haalt de tag naam uit de tag.
  44. if(($iEndPos = strpos($sTag, ' ')) !== false || ($iEndPos = strpos($sTag, '>')) !== false)
  45. {
  46. $sTagName = substr($sTag, 1, $iEndPos - 1);
  47.  
  48. # Voeg de open tag toe aan alle geopende tags.
  49. $aOpenTags[] = $sTagName;
  50. }
  51. }
  52.  
  53. # Voeg de tag toe bij de verkorte string.
  54. $sNew .= $sTag;
  55.  
  56. # Verzet de pointer.
  57. $i += strlen($sTag) - 1;
  58.  
  59. continue;
  60. }
  61. else # Tekst.
  62. {
  63. # Voeg de karakter toe aan de afgekorte string.
  64. $sNew .= $s;
  65. $iLength--;
  66.  
  67. # Als de max. lengte is behaald, beeindig dan de loop en plak er de teken reeks achter.
  68. if($iLength <= 0)
  69. {
  70. $sNew .= $sAfter;
  71.  
  72. # Sluit alle nog open tags.
  73. while(end($aOpenTags) !== false)
  74. {
  75. $sNew .= '</'.end($aOpenTags).'>';
  76. array_pop($aOpenTags);
  77. }
  78. break;
  79. }
  80. }
  81. }
  82. }
  83. else
  84. {
  85. $sNew = strlen($sString) > $iLength ? substr($sString, 0, $iLength).$sAfter : $sString;
  86. }
  87.  
  88. return $sNew;
  89. }
  90. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

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