我的问题是,如果字符串包含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;
?>
答案 0 :(得分:1)
你将无法找到你是否已经破坏了你的HTML,但是你正在尝试的方法可靠地切断字符串。 你怎么会发现这样的案件?
Hello good morning<span class='whatever'><div class='somethingelse'>blah</div>
您需要使用HTML Parser。找到你想要剪切字符串的位置,然后针对你的HTML Parser检查它是否在一个未闭合的元素中。
答案 1 :(得分:0)
您可以执行第二次编辑并使用strrpos查找最后一次&gt;并查看它是否在最后一个之前&lt;在结果字符串中。
如果是这样,切回到最后一个之前&lt;确保您没有包含部分代码。
<?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>
分开,但它会阻止您在中间打破标记。