PHP 美化HTML 显示


问题描述

因为有时候需要打印html代码, 但是查看源码的时候代码格式有些难看,所以自己手动写了一个格式html代码的方法.

解决方法

代码如下:

<?php

/**
 * 美化HTML显示
 *
 * @param string $str html内容
 * @param boolean $strip_attr 是否过滤标签属性
 * @return string
 */
function beauty_html($str, $strip_attr = false) &#123;
    if (empty($str)) &#123;
        return '';
    &#125;
    preg_match_all('/(\<[\/]?\w+([^>]*)>)([^\<]*)/', $str, $matchs);
    $beauty_str = '';  // 格式后html
    $space = "   ";  // 空格符
    $space_times = 0;  // 空格数量
    foreach ($matchs[1] as $key => $value) &#123;
        if (strpos($value, '</') === 0) &#123;  // 结束标签
            $space_times --;  // 空格 -1
            $beauty_str .= str_repeat($space, $space_times) . $value . PHP_EOL;
            continue;
        &#125;
        if ($strip_attr === true) &#123;  // 过滤标签属性
            $style = $matchs[2][$key];
            $replace = '';
            if (strpos($value, '<img') === 0) &#123;  // 处理图片
                preg_match('/(src=\S+)/', $style, $style_matchs);
                $replace = ' ' . $style_matchs[0];
            &#125;
            $value = str_replace($style, $replace, $value);
        &#125;
        $beauty_str .= str_repeat($space, $space_times) . $value;  // 开始标签
        if (strpos($value, '<img') === 0 || strpos($value, '<br') === 0) &#123;  // 图片/br换行
            $beauty_str .= PHP_EOL;
            continue;  // 没有内容,直接跳过循环
        &#125;
        // 判断是否换行
        if (!isset($matchs[3][$key]) || empty($matchs[3][$key])) &#123;  // 没有内容/空内容
            if (strpos($matchs[1][$key + 1], '</') === false) &#123;  // 下一个标签不是结束标签
                $beauty_str .= PHP_EOL;
            &#125;
            $space_times ++;
            continue;
        &#125; else if (!empty($matchs[3][$key])) &#123;  // 有内容
            $beauty_str .= PHP_EOL;
        &#125; else if (isset($matchs[1][$key + 1])) &#123;
            if (strpos($matchs[1][$key + 1], '</') === false) &#123;  // 下一个标签不是结束标签
                $beauty_str .= PHP_EOL;
            &#125;
        &#125;
        $beauty_str .= str_repeat($space, $space_times + 1) . $matchs[3][$key] . PHP_EOL;  // 内容显示
        $space_times ++;  // 空格 +1
    &#125;
    return $beauty_str;
&#125;

效果图如下

beauty html


Author: Itaken
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Itaken !
  TOC目录