Ben ile geldi bir çözüm jheddings yöntemine benzer.
Ben onun senaryoyu yukarı düzeltti ve ben burada bulunan bir kod parçacığını kullanılır
Snipplr Close Tags In A HTML Snippet
Açık etiketleri bulmak ve (ben gerçekten sadece p kapatma etiketleri umurumda varsayarak yaşıyorum unutmayın) onları kapatmak için
Not: işim ile çalışıyordu örneğin halletmek için pasajı eksikleri olabilir ama o başardı
Bu yüzden aşağıda örnek komut ben örnek cümle mola işareti sonra her şeyi kesme ve ekleme alıyorum ... "" ona. Sonra p etiketlerinin dışında her şeyi strip_tag. Sonra tüm etiketleri maç ve eşsiz olan herhangi kapatmak için closetags fonksiyonunu kullanıyorum.
Bu temiz uzak ama veri seti yeteri kadar basit ise bu konuda gitmek için hızlı bir yol olabilir.
<?php
$project_blurb = "<p>This is a blurb with content</p><p>This is another<!-- break -->blurb</p>";
if ($pos = strpos($project_blurb, '<!-- break -->')) {
$project_desc = substr($project_blurb, 0, $pos)."...";
} else {
$project_desc = $project_blurb;
}
$project_desc = strip_tags($project_desc, '<p>');
$project_desc = closetags($project_desc);
echo $project_desc;
function closetags ( $html )
{
#put all opened tags into an array
preg_match_all ( "#<([a-z]+)( .*)?(?!/)>#iU", $html, $result );
$openedtags = $result[1];
#put all closed tags into an array
preg_match_all ( "#</([a-z]+)>#iU", $html, $result );
$closedtags = $result[1];
$len_opened = count ( $openedtags );
# all tags are closed
if( count ( $closedtags ) == $len_opened )
{
return $html;
}
$openedtags = array_reverse ( $openedtags );
# close tags
for( $i = 0; $i < $len_opened; $i++ )
{
if ( !in_array ( $openedtags[$i], $closedtags ) )
{
$html .= "</" . $openedtags[$i] . ">";
}
else
{
unset ( $closedtags[array_search ( $openedtags[$i], $closedtags)] );
}
}
return $html;
}
?>