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.
<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>
|
Code: |
<?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;
}
?>
<?php function short($sString, $iLength, $sAfter = '... ') { { # De lengte van string. # Alle open tags. # 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)) { } } } 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. 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).'>'; } break; } } } } else { $sNew = strlen($sString) > $iLength ? substr($sString, 0, $iLength).$sAfter : $sString; } return $sNew; } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|