用另一个元素包装任何html元素的某种方法?

时间:2013-02-01 13:58:08

标签: php

通过表单提交消息。它可以包含 html 以及普通文字

即:

Why this code doesn't work for me?

<script type="text/javascript">
    var _gaq = _gaq || [];

    _gaq.push(['_setAccount', 'UA-XXXXX-X']);

    _gaq.push(['_trackPageview']);

    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>

我想用pre标记来包围html元素。

Why this code doesn't work for me?

<pre>
    <script type="text/javascript">
        var _gaq = _gaq || [];

        _gaq.push(['_setAccount', 'UA-XXXXX-X']);

        _gaq.push(['_trackPageview']);

        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
    </script>
</pre>

我早些时候曾在php聊天室询问过这个问题并且在这个问题的答案的作者建议阅读解决方案:php DOMDocument: complete transform of form element? wrapping and removing?

在这个例子中,一切都很完美。我需要包装任何html元素显然exe pre本身。

  1. 如果元素被折叠,则仅包裹外部元素。
  2. 如果它们是分开的,那么将它们包起来。
  3. 如果只有开放标签,则仅包装(不需要使用关闭标签进行固定)。
  4. 有没有人对这个问题的解决方案有什么想法? 提前感谢所有可以提供帮助的人。

1 个答案:

答案 0 :(得分:0)

我不确定DOMDocument如何处理格式不正确的HTML。如果邮件包含没有打开标签的结束标签,您可能会收到错误。但我想你会从以下内容中得到这个想法......

将整个邮件包装成例如div使其可解析。然后将字符串加载到DOMDocument中。使用链接答案中的DOMXPath来查找您创建的div中最顶层的元素,并使用pre包裹它们:

$dom = new DOMDocument();
$dom->loadHTML("<div>$msg</div>");

$xpath = new DOMXPath($dom);
$query = $xpath->query("body/div/*");