1

我有包含大量序列化数据的隐藏字段(我说的是数据库中的大约 1300 条记录)。使用所有这些数据,隐藏字段将作为包含序列化数据的文本框可见。另一方面,当我将此数据限制为 200 条记录时,这些字段仍应保持隐藏状态。我继续在 Chrome 的“检查元素”中检查了这个问题,我注意到整个页面中的许多 HTML 字符都不合适。

例如:

class="cont_buffer" turned into class="”cont_buffer”"

额外的引号弄乱了输入 type="hidden" 并因此显示了字段。

我能做些什么来解决这个问题?

4

1 回答 1

1

两件事情:

首先,听起来您应该对隐藏输入的值进行 html 编码,htmlentities($value, ENT_QUOTES)以确保引号被正确编码以用作 HTML 属性值。

但是,可能有更好的方法来做您正在做的事情,而不是将数千条记录传回浏览器,以便浏览器将它们返回给服务器。与其传递给隐藏的输入,不如将行临时存储在$_SESSION. 在某些情况下,在收到表单帖子时重新查询那么多行甚至可能更快,而不是让浏览器将它们传回。

如果您在 PHP 中使用 序列化行serialize(),我假设您打算unserialize()在 PHP 中使用它们。这样做时要格外小心,因为这会增加浏览器发回恶意数据的可能性,这些数据会反序列化为对您的应用程序有害的东西。如果您必须从浏览器向 发送序列化数据,请务必unserialize()验证您收到的对象或数组——确保它包含您期望的所有键或属性,并且包含您期望的那些,这样您在迭代时不会遇到问题超过它。

于 2012-09-22T18:33:57.173 回答