【问题标题】:Convert html tags to string php将html标签转换为字符串php
【发布时间】:2013-08-14 10:30:33
【问题描述】:

我一直在尝试做以下很长时间,但一直无法弄清楚。

我在 php 中有一个字符串,其中包含 html,例如:

$var = "<div style="display:inline">how</div>
        <div style="display:none">are</div>
        <div style="display:inline">you</div>
        ?";

并且想存储在另一个字符串 $var2, "howyou?"; 基本上,我想在某种意义上用 php 渲染 html。

我该怎么做?

谢谢

【问题讨论】:

  • 哦,不是我想接手的项目。分步骤:(1)将其加载到 DOMDocument 或其他内容中(2)搜索具有style 属性的所有节点(3)解析这些属性中的 css(4)如果需要,根据解析结果删除节点(5)折叠所有具有默认 whitespace:normal 的节点的空白 (6) 获取 textContent。
  • 所以在我看来,没有我可以使用的预写库或扩展来执行此操作吗?我必须手动完成吗?
  • 我不了解其他人,但我不明白您为什么要以这种方式生成 HTML。是要求吗?它是更大项目的一小部分吗?如果你多解释一下你的目标,你可能会得到更好的帮助。
  • @ShiggySteez:据我所知,它们可能就在那里,但我希望它们能走得更远(颜色、位置等)。当然,有一些部分可以做到这一点,例如 php css 解析器,选择你喜欢的;)
  • 这绝对是一个更大的项目,因为它本身并没有那么有用。我可以详细介绍该项目,但我认为在这个范围内它过分了。

标签: php html render


【解决方案1】:

尝试在任何字符串中使用 ' 而不是 " 像这样:

$var = "<div style='display:inline'>how</div>
        <div style='display:none'>are</div>
        <div style='display:inline'>you</div>
        ?";

它现在必须工作

【讨论】:

    【解决方案2】:

    首先,使用preg_replace删除带有display:none的行,然后使用strip_tags删除其他html标签

    $var = '<div style="display:inline">how</div>
            <div style="display:none">are</div>
            <div style="display:inline">you</div>
            ?';
    
    $pattern = '/.*display:none.*/';
    
    $var2 = strip_tags( preg_replace($pattern, '', $var) );
    

    【讨论】:

    • 谢谢吉拉斯。我想我会选择这条路线,因为似乎没有其他简单的方法可以摆脱它。
    【解决方案3】:

    你不必渲染它,你可以parse the HTML

    $dom = str_get_html('<div style="display:inline;">how</div>
        <div style="display:none">are</div>
        <div style="display:inline">you</div>
        ?');
    
    $invisible = $dom->find('[style*=display:none]');
    $stripped_html = $dom->outertext;
    
    foreach($invisible as $node)
    {
        $stripped_html = str_replace($node->outertext, "", $stripped_html);
    }
    
    echo str_replace(" ", "", str_get_html($stripped_html)->plaintext);
    

    结果

    howyou?
    

    【讨论】:

    • 这不是真正的答案 - 没有解释你的意图,或者它如何回答 OP。
    • 当然可以,链接会立即显示功能 - 访问 HTML 节点的任何属性,究竟是如何做到这一点的。
    • 其实没有。这不仅仅是提取几个节点。请参阅上面 Wrikken 的评论。
    • 我了解您的答案 cookie,但我知道如何解析它。事实上,我用 xpath 解析它来达到这一点。现在我需要获取剩余节点的 html 输出。
    • @ShiggySteez 请查看代码 - 这不是您想要的第一步吗?
    【解决方案4】:

    我认为你 $var 设置错误,你需要转义那些内部的“s”

    如果您需要完整的内容,只需使用 strip_tags()

    $var = "<div style=\"display:inline\">how</div>
            <div style=\"display:none\">are</div>
            <div style=\"display:inline\">you</div>
            ?";
    
    echo strip_tags($var);
    

    结果:

    你好吗?

    【讨论】:

    • 引号的转义不是问题,因为这只是一个示例,但无论如何都要感谢。但是我不希望所有内容都没有标签,我希望标签的样式生效。因此,例如 display:none 根本不显示
    • 它没有回答问题
    • 哦,我明白了,我看错了。在这种情况下,您必须手动完成。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2021-01-24
    • 2016-03-17
    相关资源
    最近更新 更多