写了一个函数
/**
* @param string $html html文本数据
* @param array $rule 处理的规则, [ '需要处理的标签' => 限制的字符数量 ]
*
*/
function processing($html, $rule){
$outHtml = "";
$pattern = '/]+)>(.*)]+)>/U'; // 0为带标签的数据 1前标签 2为不带标签的文本内容 3后标签
preg_match_all($pattern, $html, $data);
foreach($data[3] as $k => $v){
if(isset($rule[$v])){
$len = mb_strlen($data[2][$k], 'utf8');
if($len > $rule[$v]){
$start = 0;
$end = $len;
do{
$subText = mb_substr($data[2][$k], $start, $rule[$v], 'UTF-8');
$outHtml .= "{$subText}{$data[3][$k]}>";
$len -= $rule[$v];
$start += $rule[$v];
if($len<0) {
$len = 0;
$start = $end;
}
}while($len);
continue;
}
}
$outHtml .= $data[0][$k];
}
return $outHtml;
}
使用
$html = '
是的范德萨第三方第三方水电费送达发送发斯蒂芬送达送达
这是H1更好地规划获得更好地方获得更好
水电费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分
这是一段测试,此处是需要处理的一段标题数据!字符超过指定字数会对这段进行处理,数据数据数据数据数据数据
这是一另段测试,这里是H2的数据,数据
奋斗过水电费是第三个是是个地方官
';
$out = processing($html, ['h1' => 20, 'h2' => 10]);
var_dump($out);
规则中符合规定的h1、h2会进行替换,变成带相同标签的多行,并且带了标签的class等属性。这样就可以随意设置要替换的标签和长度了。
不用带的话会更好处理,改一改do中间那一段就行。