PHP如何将HTML文本转换为纯文本变量 HTML2TEXT提取标签值问题求解
HTML转纯文本及指定标签值提取实现方案
基础转换问题修复
你当前使用的Html2Text库默认会给加粗、标题类标签添加额外格式标记,若只需提取纯文本内容,可通过传入配置参数清空对应标签的格式化前后缀:
include 'Html2Text.php'; $html = "<p><b>without</b> using htmlspecialchars() function</p>"; // 传入配置禁用格式化标记,只保留纯文本内容 $options = [ 'bold_style' => '', // 清空b/strong标签的前后缀标记 'italic_style' => '', 'header_style' => '', // 清空h1~h6标签的前后缀格式标记 'do_links' => 'none', // 不需要链接地址可禁用 'drop_images' => true ]; $html2Text = new Html2Text($html, $options); echo $html2Text->getText(); // 输出结果:without using htmlspecialchars() function
单独提取指定标签内容的实现思路
如果需要单独获取<b>、<h1>等标签的对应值而非整页转换结果,推荐以下两种方案:
- 方案一:扩展Html2Text库
直接修改库中对应标签的处理逻辑,新增公共属性存储指定标签的文本内容,转换完成后直接读取该属性即可获取对应值,适合需要同时完成整页转换和标签提取的场景。 - 方案二:配合PHP原生DOMDocument类实现
该方案无需修改第三方库代码,灵活性更高,示例代码如下:
$html = "<h1>测试标题</h1><p><b>without</b> using htmlspecialchars() function</p><b>另一个加粗内容</b>"; $dom = new DOMDocument(); // 禁用HTML结构不规范产生的报错 libxml_use_internal_errors(true); // 处理中文编码问题 $dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); // 单独提取所有b标签内容 $boldTags = $dom->getElementsByTagName('b'); $boldContents = []; foreach ($boldTags as $tag) { $boldContents[] = trim($tag->nodeValue); } // 输出所有加粗内容:Array ( [0] => without [1] => 另一个加粗内容 ) print_r($boldContents); // 单独提取所有h1标签内容 $h1Tags = $dom->getElementsByTagName('h1'); $h1Contents = []; foreach ($h1Tags as $tag) { $h1Contents[] = trim($tag->nodeValue); } // 输出所有h1内容:Array ( [0] => 测试标题 ) print_r($h1Contents);
组合方案
如果需要同时完成整页HTML转纯文本、以及指定标签值的单独提取,可先通过DOMDocument提取目标标签内容存储,再调用Html2Text完成整页转换即可。
内容的提问来源于stack exchange,提问作者RCeyda
相关产品推荐
相关产品推荐

