You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP为HTML元素动态分配指定CSS类的实现方案

可直接集成的实现方案

采用PHP内置DOMDocument处理解析后的博文HTML,比正则匹配稳定性更高,不会误改文本内容,完全适配现有Parsedown解析流程。

实现逻辑

  • 不改动原有博文读取、元信息解析、URL生成的逻辑
  • 拦截Parsedown输出的HTML内容,用DOM方法做结构化处理:
    • 遍历所有<p>标签,检测内部是否嵌套<iframe>元素,存在则追加video类(不覆盖原有class属性)
    • 定位文档中第一个<img>元素,追加feature_image类(不覆盖原有class属性)
  • 处理完成后再输出到页面,避免乱码、标签损坏问题

完整可替换代码

直接替换你现有的博文渲染判断块即可:

if (!(empty($get_id)) && is_numeric($get_id) && $all_blog_files[$get_id]) { 
        $open         = fopen($all_blog_files[$get_id][0] , "r");
        $data         = @fread($open, filesize($all_blog_files[$get_id][0])); 
        fclose($open);
        $lines        = explode("\n", $data);
        $date_explode = explode('-', $lines[2]);
        $month        = $date_explode[0];
        $day          = $date_explode[1];
        $year         = $date_explode[2];
        $date_mk      = mktime(0, 0, 0, $month, $day, $year);
        $date         = date($date_format, $date_mk);
        $title        = $lines[0];
        // 移除URL中的特殊字符
        $title_strip  = str_replace([",","- ", "$", "%", "?", "!"],"", $title);
        // 替换URL中的拉丁字符
        $unwanted_array = array('Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'Đ'=>'Dj', 'đ'=>'dj', 'ć'=>'c', 'Ć'=>'C', 'Č'=>'C', 'č'=>'c');
        $clean_title = strtr( $title_strip, $unwanted_array );
        $url_title    = $all_blog_files[$postnumber][1].'/'.str_replace(" ", "-", $clean_title);

        $lines     = array_slice($lines,3);
        $content_blog   = implode("\n", $lines);
        $content_blog   = str_replace("##more##", "", $content_blog);
        $page_title = $title. " - Radio Ritam Srca Blog";
        $page_desc = substr(strip_tags($lines[1]), 0, 80). ' ' . $page_desc;
        
        echo "<div class='blog-wrap'>";
        echo "<h1 class='blog-title'>$title</h1>";
        echo "<p class='blog-date'>$date</p>";

        // --- 新增功能处理开始 ---
        $parsed_content = $parsedown->text($content_blog);
        $dom = new DOMDocument();
        // 传入编码标记避免中文乱码,屏蔽不规则HTML的报错
        @$dom->loadHTML('<?xml encoding="utf-8" ?>' . $parsed_content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

        // 给嵌套iframe的p标签添加video类
        $p_list = $dom->getElementsByTagName('p');
        foreach ($p_list as $p_item) {
            if ($p_item->getElementsByTagName('iframe')->length > 0) {
                $old_class = $p_item->getAttribute('class');
                $new_class = $old_class ? trim($old_class . ' video') : 'video';
                $p_item->setAttribute('class', $new_class);
            }
        }

        // 给第一个img标签添加feature_image类
        $img_list = $dom->getElementsByTagName('img');
        if ($img_list->length > 0) {
            $first_img = $img_list->item(0);
            $old_class = $first_img->getAttribute('class');
            $new_class = $old_class ? trim($old_class . ' feature_image') : 'feature_image';
            $first_img->setAttribute('class', $new_class);
        }

        // 输出处理后的内容,移除多余的xml标记
        $final_content = str_replace('<?xml encoding="utf-8" ?>', '', $dom->saveHTML());
        echo $final_content;
        // --- 新增功能处理结束 ---

        if ($disqus_comments == true){include('inc/plugins/disqus.php');}
        echo "</div>";
        echo "<a class='btn btn-red' href=\"$previous\">Nazad Na Blog</a>";
}

注意事项

  • 代码保留了原有所有逻辑,仅替换了原来直接输出Parsedown结果的部分
  • 追加类名时不会覆盖标签原有的class属性,兼容原有已添加类的内容
  • 不需要安装额外扩展,DOMDocument是PHP默认内置组件,绝大多数运行环境都支持

内容的提问来源于stack exchange,提问作者Milos2504

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:54:28