码农家园

关闭
导航

关于电子邮件:是否有比使用Lynx在PHP中可靠地将HTML转换为纯文本更好的方法


emailhtml-emailmultipartphp

Is there a better way then using Lynx to convert HTML to Plaintext reliably in PHP

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

我已经尝试了一些在SO上找到的不同的预构建类/函数,但是似乎没有一个产生令人满意的结果,我认为这取决于基于表的布局。

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

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

  • 创建一个临时HTML文件
  • 使用类似shell_exec(" / path / to / lynx -dump duration.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
    相关讨论

    • 代替创建" temporary.txt"文件,您可以使用-dump参数将文本返回给PHP。通过使用-stdin开关(仅UNIX),您也可以通过STDIN将HTML传递到lynx。使用-verbose,您应该可以隐藏图像标签。我发现lynx创建HTML源的纯文本表示总是非常好。
    • 谢谢,-verbose节省了我一些时间!
    • 您是否在stackoverflow.com/questions/1884550/中阅读了相同问题的答案
    • @macjohn:感谢您对此进行挖掘,很有趣。但是我认为Riceo已经根据问题尝试过了。但是请留下评论,以便两个问题都可以链接。
    • @macjohn Yep Ive在那里尝试了建议的解决方案。
    • 冒着问明显的风险,strip_tags(),htmlspecialchars()或htmlentities()怎么办?
    • @GordonM感谢您的输入,但是当上述帮助器/ Lynx将HTML转换为纯文本时,它们尝试保留原始布局和锚标记,这对于无法解析HTML的电子邮件客户端来说是完美的选择,而strip_tags()等只会留下文本背后。
    • 您遇到了什么问题,例如html2text?


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

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

    有关SO的相关问题:

    用PHPs HTML DOMDocument解析HTML


    Lynx并不是我真正相信的最佳解决方案:)此外,我本人也使用过html2text,它可以正常工作,并且比lynx更好。.无论如何,如果您更喜欢将其进行正则表达式,则比使用系统外壳要重得多( shell_exec,system,exec,popen),因为您需要preg_replace所有不必要的标签,而在php中,regex的速度非常慢。 因此,我想如果它在linux机器上,最好传递给html2text。

    相关讨论

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


    Copyright ©  码农家园 联系:[email protected]