在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有序/无序列表转换为纯文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中将 HtmlEncode/HtmlDecode 转换为纯文本?