【问题标题】:HTML doesn't get rendered, why does it happen?HTML 没有被渲染,为什么会这样?
【发布时间】:2013-07-21 16:44:44
【问题描述】:

在 PHP+MySQL 项目中,有一串来自 MySQL 表的文本,其中包含 HTML 标签,但这些标签从未被 Google Chrome 或我尝试过的任何浏览器呈现:

您可以看到 HTML (p, strong) 没有被浏览器解释。

所以结果是:

编辑:HTML/PHP

<div class="winery_description">
    <?php echo $this->winery['description']; ?>
</div>

$this-&gt;winery 为 SQL Select 的数组结果。

编辑 2:我是世界上最愚蠢的人,源包含实体。所以新的问题是:如何强制解释实体?

真实来源:

有什么建议吗?谢谢!

【问题讨论】:

  • 能否请您展示创建这个的 HTML/PHP 代码?
  • 如果您查看源代码而不是 DOM,您会看到什么?
  • 我同意@Barmar。执行“查看源代码”,因为您不会在 Firebug/开发人员控制台中看到任何编码。
  • 数据库中的描述必须包含HTML实体,更新数据库的脚本可能在插入前调用htmlentities()。试试die('&lt;pre&gt;'.htmlentities($var).'&lt;/pre&gt;') 看看吧。
  • 虽然听起来很愚蠢,但我的问题的“好”答案是使用html_entities_decode($str);...

标签: php html webkit render


【解决方案1】:

您可能正在使用innerTexttextContent 来设置您的div 的内容,这只是将div 的子节点替换为单个文本节点。

请改用innerHTML,让浏览器解析 HTML 并创建适当的 DOM 节点。

【讨论】:

  • 这不是 javascript 驱动的,它直接来自数据库。感谢您的回复,很抱歉给您带来了困惑。
  • @TomShreds 那么它必须包含 HTML 实体。请注意,die($var); 仍将允许浏览器解析这些 HTML 实体,您仍将看到表示,而不是实际字符。试试看:echo '&lt;pre&gt;',print_r($var, true),'&lt;/pre&gt;';
  • @TomShreds 抱歉,这仍然不会显示。执行echo htmlentities($var); 以查看 HTML 页面中的实际值。或者使用Content-Type: text/plain输出页面
  • 感谢您的回复和 cmets,innerText/textContent 与 innerHTML 的东西我不知道 :) 我的源代码最终包含实体,但浏览器不会解释它们:-/跨度>
  • @TomShreds 使用您的原始代码,当您查看源代码而不是检查元素时,您会看到实体吗?如果是这样,这就是浏览器不解释它们的原因。
【解决方案2】:

@Paulpro 提供的答案是正确的。

另外请注意,如果您使用的是jQuery,请务必使用.html() 方法而不是.text() 方法:

$('#your_element').html('<h1>This works!</h1>');

$('#another_element').text('<h2>Wrong; you will see the <h2> in the output');

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 2020-11-19
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多