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(' ',' ',$bewrite);
$bewrite = str_replace('&','',$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);