我有一个数据库,该数据库是我从gmail帐户中收集的电子邮件,我正尝试将这些电子邮件呈现到内部页面上。
这是可行的,但是由于缺少标签/未关闭标签,偶尔会收到一封导致问题的电子邮件。可能会有一些我不想在整个页面上呈现的CSS。
我可以使用iFrame,但是它们似乎已经过时,而且不是正确的方法。
建议的方法是从数据库呈现HTML块,但不影响页面的其余部分?
答案 0 :(得分:0)
对于CSS部分,您可以为具有电子邮件内容的div添加一个id
,然后将id
作为父元素添加到所有css选择器!像this
然后您可以检查要正确关闭的标签,这两个想法可能都需要一定的处理能力,但花费不大,而且可以通过预先处理和存储结果来防止重新计算。
答案 1 :(得分:0)
首先,您需要将HTML加载并解释为未损坏的内容。为此,您使用DOM解析器。 http://php.net/manual/en/domdocument.loadhtml.php
我可以使用iFrame,但是它们似乎已经过时,而且不是正确的方法。
不,这是错误的。在获得shadow DOM良好的支持之前(甚至可能以后),iframe是在自己的上下文中隔离某些内容的正确方法。确保您use the sandbox
property。
请注意,您可以在没有iframe的情况下执行此操作,但这将需要做更多的工作。
但是很好奇,像“ Google”这样的东西如何呈现它而不影响整个页面。
即使您使用iframe方法,Google也不只是接受通过电子邮件发送的任何内容,您也不应该接受。您需要将支持哪些元素列入白名单,并过滤掉其中的所有内容。接下来,您需要确定将支持哪些CSS属性。最后,您需要将整个DOM文档转换为有用的东西并将其输出为HTML。查看HTML Purifier的白名单。
这都不是一件容易的事。您正陷入很多麻烦。 HTML电子邮件没有真正的标准。每个提供商和邮件客户端都有一套不同的支持内容,并且结果各不相同。
答案 2 :(得分:0)
我不会说iFrame是过时的,在您的情况下,我会认为它们是有效的输出。
但是很好奇,像“ Google”这样的东西如何呈现它而不影响整个页面。
如果您检查的话,他们会使用iFrame。
100%同意@brad通过解析器运行它,然后将其输出到iFrame。