在页面中渲染HTML块(PHP)

时间:2018-07-29 21:16:05

标签: php html

我有一个数据库,该数据库是我从gmail帐户中收集的电子邮件,我正尝试将这些电子邮件呈现到内部页面上。

这是可行的,但是由于缺少标签/未关闭标签,偶尔会收到一封导致问题的电子邮件。可能会有一些我不想在整个页面上呈现的CSS。

我可以使用iFrame,但是它们似乎已经过时,而且不是正确的方法。

建议的方法是从数据库呈现HTML块,但不影响页面的其余部分?

3 个答案:

答案 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 sandboxproperty

请注意,您可以在没有iframe的情况下执行此操作,但这将需要做更多的工作。

  

但是很好奇,像“ Google”这样的东西如何呈现它而不影响整个页面。

即使您使用iframe方法,Google也不只是接受通过电子邮件发送的任何内容,您也不应该接受。您需要将支持哪些元素列入白名单,并过滤掉其中的所有内容。接下来,您需要确定将支持哪些CSS属性。最后,您需要将整个DOM文档转换为有用的东西并将其输出为HTML。查看HTML Purifier的白名单。

这都不是一件容易的事。您正陷入很多麻烦。 HTML电子邮件没有真正的标准。每个提供商和邮件客户端都有一套不同的支持内容,并且结果各不相同。

答案 2 :(得分:0)

我不会说iFrame是过时的,在您的情况下,我会认为它们是有效的输出。

  

但是很好奇,像“ Google”这样的东西如何呈现它而不影响整个页面。

如果您检查的话,他们会使用iFrame。

100%同意@brad通过解析器运行它,然后将其输出到iFrame。