【问题标题】:How to overcome malformed html in html table in PHP website如何克服 PHP 网站中 html 表中格式错误的 html
【发布时间】:2014-10-20 19:50:25
【问题描述】:

我有显示电子邮件内容的 html 表格。此电子邮件内容可以来自任何电子邮件客户端(浏览器、Outlook、Thunderbird...)。如果这个 html 格式不正确,它会在我的 html 表中造成混乱。

例如:如果电子邮件内容中有任何未封闭的标签或格式错误的表格,它会破坏我显示此电子邮件内容的表格的结构。

你能告诉我有没有其他方法可以在不干扰我的主表的情况下显示这个内容......

这是屏幕截图:

【问题讨论】:

  • 如果不显示所述格式错误的 html 样本,将很难得到任何体面的答案。截图告诉我们什么。也就是说:您可以尝试使用 libtidy 修复 html。
  • sorry peehaa... 例如:电子邮件内容是这样的
    这是示例文本
    这是另一个文本.....这个 html 内容显示在我的表格列中。在这个内容中我们已经关闭了 对吧?因此,我的主表对齐丢失了
  • 你真的需要@hadyn所说的简单textcontent的HTML内容吗?
  • 确实需要html内容但不打扰主表

标签: php html-table html-email


【解决方案1】:

您可以使用DOMDocument 加载HTML 内容表单电子邮件。然后,您可以提取正文上下文并修复格式错误的 HTML。

示例:

<?php

    //note that the div tag is not closed properly 
    $emailContent = '<html><head></head><body><div>bla<div><h1>hgjhjdfg</h1></body></html>';

    $dom = new DOMDocument();
    $new = new DOMDocument();
    $dom->loadHTML($emailContent);

    //extract the body
    $body = $dom->getElementsByTagName('body')->item(0);

    foreach ($body->childNodes as $child){
        $new->appendChild($new->importNode($child, true));
    }

    //dom document automatically tries to repair malformed HTML so when we use saveHTML().
    echo $new->saveHTML();

?>

输出:

<div>bla<div><h1>hgjhjdfg</h1></div></div>

如您所见,未关闭的&lt;div&gt; 标签现在已关闭。如果您使用电子邮件中的 HTML(或从任何地方获取它)执行此操作,则可以通过这种方式修复 html。

然而 DOMDocument 在修复格式错误的 HTML 方面做得不是很好,因此结果可能出乎意料,但至少您的表格不受影响。

替代品

您还可以使用 ajax 分别加载每条电子邮件内容。如果要修复格式错误的 HTML,浏览器 dom 会做得更好。

其他问题

您还必须在 javascript 上过滤电子邮件内容。如果它包含 javascript,它也可能使您的表格甚至整个网页变形。

例如,有人将其放入电子邮件 (jquery) 中: $('body').hide();

【讨论】:

  • 非常不错的sn-p。谢谢。实际上,当我使用它时,我遇到了另一个问题。请让我知道如何解决。这里我直接关闭 例如:$emailContent = '
    bla

    hgjhjdfg

    ';然后我收到类似警告的问题:DOMDocument::loadHTML() [domdocument.loadhtml]: Unexpected end tag : tr in Entity,
  • 非常感谢......我使用 libxml_use_internal_errors(true); 解决了这个问题;
  • @muralikalpana 好吧,其余的似乎你自己发现了。如果我的回答解决了您的问题,请考虑接受我的回答。
【解决方案2】:

使用 iframe 或去掉 php 中的 HTML 并使用纯文本。

w3schools example

<iframe srcdoc="<p>Hello world!</p>"></iframe>

【讨论】:

  • 如果您要投反对票,请说明理由。这可能是一个合适的答案,具体取决于未明确说明的 OP 要求。
猜你喜欢
相关资源
最近更新 更多
热门标签