【问题标题】:Why do I not need to use htmlEntities?为什么我不需要使用 htmlEntities?
【发布时间】:2012-04-27 21:23:54
【问题描述】:

我正在从我的数据库中提取数据(原始):

long's streetWe’d " tree < < ! cool & <body>

据我所知,为了将其输出到 html 页面,我需要将其包装在 htmlEntities 中。

但是当我包装它时,它什么也没输出。 var_dump 显示:

long's streetWe&acirc;��d &quot; tree &lt; &lt; ! cool &amp; &lt;body&gt;

包装在 htmlspecialchars 输出中:

long's streetWe’d &quot; tree &lt; &lt; ! cool &amp; &lt;body&gt;

var_dump 输出与这个相同。

但是在不使用包装函数的情况下输出,因为它存储在数据库中。

当我输出它时,它通过表单填充方法显示(这个值在更大的数据数组中)

我不知道为什么会这样。有人知道吗?

这都是在 php 中使用 zend 和 mysql db 构建的。

亲切的问候,

【问题讨论】:

  • 您正在通过 HTML 在网页上显示此内容?
  • 是的,它正在填充到一个表单中,并且该表单正在输出到html页面
  • 贴出您用于输出此文本的代码。
  • 您确定您在此处发布的原始字符串是否正确?也许它已经在数据库中编码了?您是否尝试过通过 mysql 控制台界面(不是 phpMyAdmin)访问它?
  • 根据我的经验,htmlentities() 通常是一种可怕的 hack,可以弥补沿线某处的不正确编码,并导致比它解决的问题更多 - 如果数据库、数据库连接器和输出文档都使用相同的字符集(例如 utf-8)你应该可能不需要使用htmlentities()htmlspecialchars() - htmlentities() 不是很多(有特定的情况,但通常没有)。

标签: php mysql html zend-framework utf-8


【解决方案1】:

大概表单填充方法希望您给它文本而不是 HTML,因此它在输出数据之前转换为 HTML。

这是解决问题的标准且明智的方法。数据应在最后一刻进行转义(以避免不当转义)。

【讨论】:

  • 当我回显填充表单的内容时,我仍然可以在不使用任何函数的情况下获得正确的值输出。但是,如果我用 htmlspecialchars 回显它,我也会得到正确的输出,但 htmlentities 仍然输出:long's streetWeâ��d " tree 。所以我认为关于表单的说法是正确的.. 它自动格式化文本 - 但是不使用函数(不在表单中)的回显如何输出正确的数据。
猜你喜欢
  • 1970-01-01
  • 2020-09-21
  • 2015-01-07
  • 1970-01-01
  • 2019-06-09
  • 2011-07-05
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多