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

Posted

技术标签:

【中文标题】有没有更好的方法然后使用 Lynx 在 PHP 中可靠地将 HTML 转换为纯文本【英文标题】:Is there a better way then using Lynx to convert HTML to Plaintext reliably in PHP 【发布时间】:2012-01-28 16:54:17 【问题描述】:

我想将具有基于表格布局的 html 文件转换为纯文本,以便通过 php 发送多部分电子邮件。

我尝试了一些我在 SO 上找到的不同的预构建类/函数,但它们似乎都没有产生像样的结果,我认为这取决于基于表格的布局。

我不想推出自己的课程来剥离 HTML 和格式化结果,因为我确信在生产中遇到边缘问题之前我不会考虑或无法测试这些问题。

到目前为止,我想出的最佳解决方案是:

    创建一个临时 HTML 文件 使用类似 shell_exec("/path/to/lynx -dumptemporary.html");创建电子邮件的纯文本版本 使用一些正则表达式删除任何剩余的不需要的标签

这很好用,但我有点担心它不是实现体面的多部分电子邮件的最佳方式。有人知道更好的方法吗?

为了澄清,我已经尝试了以下但没有成功:

html2text 类 - http://www.chuggnutt.com/html2text.php Markdownify - http://milianw.de/projects/markdownify/ html2text 版本 2 - http://www.howtocreate.co.uk/php/html2texthowto.html http://journals.jevon.org/users/jevon-phd/entry/19818

【问题讨论】:

您可以使用-dump 参数将文本返回给PHP,而不是创建“temporary.txt”文件。通过使用-stdin 开关(仅限UNIX),您也可以通过STDIN 将HTML 传递到lynx。使用-verbose,您应该能够抑制图像标签。我发现 lynx 总是非常适合创建 HTML 源的纯文本表示。 啊,谢谢,'-verbose' 节省了我一些时间! 你读过***.com/questions/1884550/…中相同问题的答案吗 @macjohn:谢谢你的挖掘,很有趣。但我认为 Riceo 已经根据问题尝试过。但请留下评论,以便将两个问题联系起来。 @macjohn 是的,我已经尝试过那里提出的解决方案。 【参考方案1】:

Lynx 并不是我真正相信的最佳解决方案 :) 另外,我自己也使用过 html2text,它运行良好并且比 lynx 更好。无论如何,如果您更喜欢正则表达式,它会比使用系统外壳(shell_exec,system,exec,popen),因为您需要 preg_replace 所有不必要的标签,并且在 php 正则表达式中非常慢。所以我想如果它在linux机器上最好传递给html2text ..

【讨论】:

感谢您的回复。我只会使用正则表达式来清理 Lynx 添加的一些标签,而不是整个文档。通过 Regex 剥离 HTML 将构成“滚动我自己的”清理功能,这可能会使我面临许多边缘错误。此外,html2text 不适合基于表格的布局。 还没有尝试过带有表格布局的html2text,但我认为几乎没有任何软件可以正常处理它:))【参考方案2】:

PHP DomDocument 应该可以帮助您。 您可以遍历 DOM 树并根据需要剥离相关内容。

http://php.net/manual/en/class.domdocument.php

关于 SO 的相关问题:

Parse HTML with PHP's HTML DOMDocument

【讨论】:

以上是关于有没有更好的方法然后使用 Lynx 在 PHP 中可靠地将 HTML 转换为纯文本的主要内容,如果未能解决你的问题,请参考以下文章

Lynx浏览器简明使用指南(转)

Linux下文本浏览器lynx

在 PHP 中解析无效 HTML 的最佳方法

在 PHP 中解析无效 HTML 的最佳方法

在 PHP 中解析无效 HTML 的最佳方法

在 PHP 中解析无效 HTML 的最佳方法