为了账号安全,请及时绑定邮箱和手机立即绑定

有没有人遇到过这个问题哈!PHP 正则匹配标签内容,根据字符串长度进行替换

有没有人遇到过这个问题哈!PHP 正则匹配标签内容,根据字符串长度进行替换

ibeautiful 2019-08-14 20:38:17
$str="是的范德萨第三方第三方水电费送达发送发斯蒂芬送达送达更好地规划获得更好地方获得更好水电费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分的官方说的跟是梵蒂冈富商大贾讽德诵功发的大概发给水电费是梵蒂冈是奋斗过水电费是第三个是是个地方官"实现:$str里所有h1标签内容长度超过20个字,进行追加h1标签。根据上文实现下面效果:$str="是的范德萨第三方第三方水电费送达发送发斯蒂芬送达送达更好地规划获得更好地方获得更好水电费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分费第三方都是范德萨范德萨范德萨水电费阿道夫告诉对方水电费电风扇分的官方说的跟是梵蒂冈富商大贾讽德诵功发的大概发给水电费是梵蒂冈是奋斗过水电费是第三个是是个地方官"求方法!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

写了一个函数
/**
*@paramstring$htmlhtml文本数据
*@paramarray$rule处理的规则,['需要处理的标签'=>限制的字符数量]
*
*/
functionprocessing($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.="<{$data[1][$k]}>{$subText}";
$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中间那一段就行。
                            
查看完整回答
反对 回复 2019-08-14
  • 2 回答
  • 0 关注
  • 503 浏览
慕课专栏
更多

添加回答

了解更多

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号