在实际开发的过当中,在前台页面展示数据时,有时候需要截取一部分内容;如果截取的内容是使用富文本编辑填写会默认带上html标签,直接截取会导致html标签截取不全,这样会导致页面会变形。我们是需要先把内容中的html标签去除后才能进行截取。考虑到代码重用性,直接封装成函数,代码如下:
/**
* HTML转换为文本
*
* @param string $str 需要转换的字符串
* @return string
*/
function SpHtml2Text($str)
{
//查找并替换掉style、script标签和<!-- -->注释标签
$str = preg_replace("/<sty(.*)\\/style>|<scr(.*)\\/script>|<!--(.*)-->/isU","",$str);
//存放替换好后的字符串
$alltext = "";
//查找<>符号的状态
$start = 1;
for($i=0;$i<strlen($str);$i++)
{
if($start==0 && $str[$i]==">")
{
$start = 1;
}
else if($start==1)
{
//当$str[$i]的值等于>(大于号)时,就$alltext拼接一个空格
if($str[$i]=="<")
{
$start = 0;
$alltext .= " ";
}
else if(ord($str[$i])>31) // ord函数:返回字符的 ASCII 码值
{
$alltext .= $str[$i];
}
}
}
//将中文空格替换成英文空格
$alltext = str_replace(" "," ",$alltext);
//将html ASCII 代码实体编号替换为空
$alltext = preg_replace("/&([^;&]*)(;|&)/","",$alltext);
//将多个空格替换成一个空格
$alltext = preg_replace("/[ ]+/s"," ",$alltext);
return $alltext;
}
===================测试代码如下======================
//需要处理的html代码
$html = '<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>这是标题</h1>
<p>这是测试内容</p>
</body>
</html>';
//调用HTML转换为文本的SpHtml2Text函数
$str = SpHtml2Text($html);
//输出结果
echo $str;
===================测试结果如下======================
|
|