<div class="contents"><h2>test</h2><p>Lorem ipsum dolor sit amet consectetuer adipiscing hac augue Ut Nulla. Nulla
at elit et tortor Phasellus volutpat feugiat tempor Morbi id. Pellentesque
Mauris Sed leo tellus ipsum </p></div>...
<div class="contents"><h2>test</h2><p>Lorem ipsum dolor sit amet consectetuer adipiscing hac augue Ut Nulla. Nulla
at elit et tortor Phasellus volutpat feugiat tempor Morbi id. Pellentesque
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.
<div class="contents"><h2>test</h2><p>Lorem ipsum dolor sit amet consectetuer adipiscing hac augue Ut Nulla. Nulla
at elit et tortor Phasellus volutpat feugiat tempor Morbi id. Pellentesque
Mauris Sed leo tellus ipsum vel tincidun...</p></div>
<div class="contents"><h2>test</h2><p>Lorem ipsum dolor sit amet consectetuer adipiscing hac augue Ut Nulla. Nulla
at elit et tortor Phasellus volutpat feugiat tempor Morbi id. Pellentesque
Mauris Sed leo tellus ipsum vel tincidun...</p></div>
<?php
function short($sString, $iLength, $sAfter = '... ')
{
if(strpos($sString, '<') !== false && $iLength != strlen(strip_tags($sString)))
{
# De lengte van string.
$iTotal = strlen($sString);
# Alle open tags.
$aOpenTags = array();
# De verkorte string.
$sNew = '';
for($i = 0; $i < $iTotal; $i++)
{
# Haalt het huidige karakter op.
$s = $sString{$i};
# We hebben te maken met een mogelijke tag.
if($s == '<' && ($iPos = strpos($sString, '>', $i)) !== false)
{
# Haal de tag op.
$sTag = substr($sString, $i, $iPos - $i + 1);
# Kijken of het een open of gesloten is.
if($sTag{1} == '/') # Sluit tag.
{
# Haalt de tag naam uit de tag.
if(($iEndPos = strpos($sTag, ' ')) !== false || ($iEndPos = strpos($sTag, '>')) !== false)
{
$sTagName = substr($sTag, 2, $iEndPos - 2);
# Als de sluitende tag gelijk is aan degeen die op dat moment open is, haal hem uit de array.
if($sTagName == end($aOpenTags))
{
array_pop($aOpenTags);
}
}
}
else if($sTag{strlen($sTag) - 2} != '/') # Open Tag.
{
# Haalt de tag naam uit de tag.
if(($iEndPos = strpos($sTag, ' ')) !== false || ($iEndPos = strpos($sTag, '>')) !== false)
{
$sTagName = substr($sTag, 1, $iEndPos - 1);
# Voeg de open tag toe aan alle geopende tags.
$aOpenTags[] = $sTagName;
}
}
# Voeg de tag toe bij de verkorte string.
$sNew .= $sTag;
# Verzet de pointer.
$i += strlen($sTag) - 1;
continue;
}
else # Tekst.
{
# Voeg de karakter toe aan de afgekorte string.
$sNew .= $s;
$iLength--;
# Als de max. lengte is behaald, beeindig dan de loop en plak er de teken reeks achter.
if($iLength <= 0)
{
$sNew .= $sAfter;
# Sluit alle nog open tags.
while(end($aOpenTags) !== false)
{
$sNew .= '</'.end($aOpenTags).'>';
array_pop($aOpenTags);
}
break;
}
}
}
}
else
{
$sNew = strlen($sString) > $iLength ? substr($sString, 0, $iLength).$sAfter : $sString;
}
return $sNew;
}
?>