php处理html字符串

目录

在开发APP接口的时候,我们经常需要将html富文本字符串进行处理,PHP中自带了许多有用的函数来给我们进行使用

需要用到的函数:

  • str_replace() 字符串替换
  • html_entity_decode() html字符串转html标签
  • strip_tags() 除去所有html标签
  • preg_match_all() 全局正则匹配字符串
  • array_unique() 去除数组中重复的元素(用于解决全局正则匹配带来的元素重复的问题)
  • array_flip() 将键值交换,因为键名不能重复,所以重复元素会被去掉,两次flip下来就能够得到不重复的键值数组
  • array_values() 返回只有键值无键名的数组

快速去除html字符

$bewrite = strip_tags(html_entity_decode($htmlStr),'<br>');

先转HTML标签再去除标签,但是注意保留换行标签,在APP中的文字依然需要简单地排版。 接着我们再把br标签再转成本地APP的\n

$bewrite = str_replace('<br/>','\n',$bewrite);

但似乎字符串还是没有除干净,因为会残余一些html本身的换行字符&和空格,再替换一次

$bewrite = str_replace('&nbsp;',' ',$bewrite);
$bewrite = str_replace('&amp;','',$bewrite);

但通常情况下,我们的HTML字符串中不仅有文本,还有图片,img中的src属性也必须要挑出来

正则匹配标签属性

下面我以img中匹配src图片地址为例子

$unmatchedstr = html_entity_decode($data['secondgoods_bewrite']); //转html字符串
preg_match_all('/\<img.*?src\=\"(.*?)\"[^>]*>/i',$unmatchedstr,$match);//正则匹配图片src地址

但这还没完,我们发现正则出来的链接有许多的重复的链接,我们必须要去除变量$match[1]中重复的值

$matches = array_unique($match[1]);
//来两次array_flip()或许比unique更加高效一些
$matchresult = array_values($matches);//取键值数组的值,去掉键名就完成了

附文:

对于远程的src地址,有一种特殊的正则匹配可以排除掉本地的图片

preg_match_all('/((http|https):\/\/)+(\w+\.)+(\w+)[\w\/\.\-]*(jpg|gif|png)/',$unmatchedstr,$matches);