黑马程序员技术交流社区

标题: 将HTML(富文本入库的内容)转换为文本 [打印本页]

作者: 游龙    时间: 2018-6-8 14:09
标题: 将HTML(富文本入库的内容)转换为文本
在实际开发的过当中,在前台页面展示数据时,有时候需要截取一部分内容;如果截取的内容是使用富文本编辑填写会默认带上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;


===================测试结果如下======================






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2