仅在html标记之后裁剪字符串


Crop the string only after html tag

我的问题是,如果字符串包含html标记,那么该字符串应该夹在html元素之间。这是我的密码。如果绳子长度大于80,我想剪断绳子。当我尝试这样做时,字符串被裁剪在这些标签之间。这将影响css样式问题。所以字符串裁剪应该只在html标记结束之后。

<?php 
      echo $word='hello good morning<span class="em emj2"></span> <span class="em emj13"></span>      <span class="em emj19"></span> <span class="em emj13"></span> hai';
$a=strlen($word);    
if($a>80)
 {
  echo substr($word,0,80);
 }
else
    echo $word;
?>

您将无法发现您是否破坏了html,但使用您尝试的方法可靠地剪切了字符串。你会如何发现这样的病例?

Hello good morning<span class='whatever'><div class='somethingelse'>blah</div>

您将需要使用HTML Parser。找到要剪切字符串的位置,并对照HTML Parser进行检查,看看您是否在未闭合的元素中。

您可以执行第二次编辑,并使用strrpos查找最后一个>,查看它是否在最后一个<在生成的字符串中。

如果是,则切回最后<以确保不包含部分标记。

<?PHP
echo $word='hello good morning<span class="em emj2"></span> <span class="em emj13"></span><span class="em emj19"></span> <span class="em emj13"></span> hai';
echo "'n";
$a=strlen($word);
echo strlen($word);
echo "'n";
if($a>80) {
        $b=substr($word,0,80);
        echo "$b'n";
        $end=strrpos($b,'>');
        $start=strrpos($b,'<');
        echo "> is $end from the end, < is $start from the end'n";
        if($start > $end){
                echo "cutting '$b' down to $end characters (+1 to keep the '>')'n";
                $b=substr($b,0,$end+1);
        }
        echo "$b'n";
}
else {
        echo $word."'n";
}

这不会阻止您将关闭的</tag><tag>分离,但会阻止您断开在中间的标记。