【问题标题】:Strip Incomplete HTML Tags using PHP / HTMLPurifier使用 PHP / HTMLPurifier 去除不完整的 HTML 标签
【发布时间】:2013-09-25 02:48:07
【问题描述】:

给定以下 html:

<p>I am a paragraph</p>

<ul>
<li>Item</li>
<li>Item 2</li>
</ul>

<div class="special_div_from_email_client">
<span>Some text

我需要去掉不完整的标签。

我们试图做的是通过在原始消息中放置一个自定义字符串来解析电子邮件消息,这样如果它包含在响应中,它就可以被删除。假设是,如果电子邮件程序将原始消息包含在任何 html 标记中,我们希望删除封闭的 html 标记。

【问题讨论】:

    标签: php html-parsing html-email htmlpurifier


    【解决方案1】:

    这可能不是您想要的,但我发现删除无效标签有时会破坏您的 HTML 电子邮件的其余部分(特别是 TRTD 标签,如果您使用表格布局)。

    使用这些库/工具之一为您完成/修复 HTML 可能会更好。然后,您可以遍历有效 HTML 中的 DOM 以删除/修改元素。

    这可能看起来很长,但我希望这会有所帮助。

    【讨论】:

    • 我们正在使用 htmlpurifier。我们最初的希望是 htmlpurifier 能够删除损坏的元素,但我找不到任何显示如何的东西。
    • 我已经有一段时间没有这样做了,但我认为您需要 PHP Tidy 扩展。 This is the method 你需要修复损坏的 HTML。查看该页面上的示例。
    • 这与 htmlpurifier 默认情况下所做的相同。鉴于我最初的示例,我实际上希望删除损坏的
      ,而不是修复。不过还是谢谢。
    • 好的,抱歉,我无法提供更多帮助。祝你好运。
    【解决方案2】:

    您提到您在原件中放置了一个字符串。如果将其放在原始邮件正文之前,您不能这样做 strpos 和 substr 来修剪您的电子邮件吗?这是我刚刚拼凑的一个函数作为示例:

    // myKey can be a comment before the body of your message, $html is your email content
    function trim($html, $myKey){
      $htmlTrimmed = $html;
      if (strpos($html, $myKey)!==false){
        $origStart = strpos($html, $myKey);
        $htmlTrimmed = substr($html, 0, $origStart);
      }
      return $htmlTrimmed;
    } 
    

    我没有测试它,但你明白了。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签