隐藏字段随着大量序列化数据变得可见

时间:2012-09-22 18:31:54

标签: php html serialization

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

例如:

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

额外的引号会弄乱输入类型=“隐藏”,从而显示字段。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

两件事:

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

然而,可能有更好的方法来做你正在做的事情,而不是将数千条记录传回浏览器,以便浏览器可以将它们返回给服务器。您可能最好暂时将行存储在$_SESSION中,而不是传递给隐藏的输入。在某些情况下,只有在收到表单帖子时才重新查询那么多行,而不是让浏览器将它们传回去,这可能会更快。

如果您使用serialize()在PHP中序列化行,我假设您打算在PHP中unserialize()使用它们。这样做时要格外小心,因为这样可能会导致浏览器发回恶意数据,而这些数据会反序列化为对您的应用程序有害的内容。如果必须将序列化数据从浏览器发送到unserialize(),请确保验证您收到的对象或阵列 - 确保它包含您期望的所有键或属性,并且那些你希望你在迭代它时没有问题。