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

时间:2014-10-09 05:45:45

标签: php

我的问题是,如果字符串包含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;
?>

2 个答案:

答案 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>分开,但它会阻止您在中间打破标记。