0

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

IE:

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元素。

IE

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? 包装和去除?

在这个例子中一切都是完美的,除了几件事。我需要包装任何显然 exept 的 html 元素pre

  1. 如果元素被折叠,则仅包裹外部元素。
  2. 如果它们是分开的,则将它们各自包装起来。
  3. 如果只有打开标签,则只包装它(无需使用关闭标签修复)。

有没有人对这个问题的解决方案有任何可能的想法?提前感谢所有可以提供帮助的人。

4

1 回答 1

0

我不确定如何DOMDocument处理格式不正确的 HTML。如果消息包含结束标签而没有开始标签,您可能会收到错误消息。但我想你会从下面得到这个想法......

将整个消息包装成例如 adiv以使其可解析。然后将字符串加载到 DOMDocument 中。在链接的答案中使用DOMXPathlike 来查找您创建的 div 中最顶层的元素,并将其包装为pre

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

$xpath = new DOMXPath($dom);
$query = $xpath->query("body/div/*");
于 2013-02-01T14:20:25.330 回答