在PHP中将HTML有序/无序列表转换为纯文本[重复]

Posted

技术标签:

【中文标题】在PHP中将HTML有序/无序列表转换为纯文本[重复]【英文标题】:Converting HTML ordered/unordered list to plain text in PHP [duplicate] 【发布时间】:2020-02-01 14:08:15 【问题描述】:

我在 html 中有一些 HTML 有序/无序列表。由于我想将其导出为 txt 文件,因此我需要将其转换为纯文本。

例如。原始 HTML:

<ol><li>Item 1</li></li>Item 2</li><li>Item 3</li></ol>

我想改成

1. Item 1
2. Item 2
3. Item 3

我在 *** 上进行了搜索,但只找到了相反转换的解决方案。 A regex that converts text lists to html in php

有什么办法可以解决吗?谢谢!

【问题讨论】:

对了,原来的HTML有一个错误,第二个li标签以开头,而不是。 您希望将 HTML 呈现的输出保存在文本文件中? 您想知道如何使用 PHP 将 HTML 转换为文本吗?或者任何方式都可以接受?也许 XSLT 可能是合适的? 【参考方案1】:

您可以简单地替换不需要的标签,然后将其分解为一个标签,该标签将为每一行返回自身。

<?php
$html = '
<ol>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ol>
';

$html = str_replace(['<ol>', '</ol>', '</li>'], '', $html);
$html = explode('<li>', $html);

print_r($html);

【讨论】:

【参考方案2】:

我认为它比正则表达式要复杂一些,尤其是如果您想在前面添加数字。但是这段小代码会将<ol><li>Item 1</li></li>Item 2</li><li>Item 3</li></ol> 翻译成

* Item 1
* Item 2
* Item 3
<?php

$string = "<ol><li>Item 1</li><li>Item 2</li><li>Item 3</li></ol>";

$string= preg_replace("/<li>/", " * ", $string);
$string= preg_replace("/<\/li>/", "\n", $string);
$string= preg_replace("/<\/?ol>/", "", $string);

echo $string;

【讨论】:

* 并不代表 有序 列表。这可能适用于无序列表 正如我所说,你将不得不循环遍历列表来添加数字,据我所知,你不能循环遍历并在正则表达式中添加数字。 请记住 - 用户将名称“Item 1”作为示例,它是 item 1,这并不意味着该项目中会有一个数字。 我知道,但如果他想要一个有序列表,他可以创建一个 for 循环,在每一行添加一个数字或类似的东西。【参考方案3】:

请查看html2text 库。它有不同的方法将您的HTML 字符串转换为纯文本。

【讨论】:

【参考方案4】:

我认为我们需要在这里记住,LI 标签中提到的数字不能用作参考,因为它们可能是“驴”、“羊”、“猴子”。

我的解决方案匹配 LI 标记内的任何内容,然后循环匹配以创建项目编号。

preg_match_all 将创建一个带有子数组的数组。第一个包含整个匹配项,包括 LI 标记,第二个只匹配在 (.*?) 非贪婪区域内找到的任何内容。

我已经使用 \n 作为换行符,但如果是 HTML 输出,那显然是一个 BR 标记

$str = "<ol><li>Monkey</li></li><li>Lamb</li><li>Elephant</li></ol>";
preg_match_all("/<li>(.*?)<\/li>/i",$str,$matches);
if(count($matches[1])>0)
    foreach($matches[1] as $k=>$v)
        echo ($k+1).". $v\n";
    

【讨论】:

以上是关于在PHP中将HTML有序/无序列表转换为纯文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中将文本列表转换为 html 的正则表达式

如何在 C# 中将 HtmlEncode/HtmlDecode 转换为纯文本?

有没有更好的方法然后使用 Lynx 在 PHP 中可靠地将 HTML 转换为纯文本

如何在 C# 中将 HTML 转换为文本?

PHP将网页内容转换为纯文本文件并保存为TXT

使用 C++ 将 HTML 转换为纯文本