我的问题是,如果字符串包含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>
分离,但会阻止您断开在中间的标记。