我隐藏了包含大量序列化数据的字段(我在谈论数据库中的1300条记录)。使用所有这些数据,隐藏字段将显示为包含序列化数据的文本框。另一方面,当我将这些数据限制为200条记录时,字段保持隐藏状态。我继续在Chrome的“检查元素”中检查了这个问题,我注意到整个页面中的许多HTML字符都不合适。
例如:
class="cont_buffer" turned into class="”cont_buffer”"
额外的引号会弄乱输入类型=“隐藏”,从而显示字段。
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
两件事:
首先,听起来你应该使用htmlentities($value, ENT_QUOTES)
对隐藏输入的值进行html编码,以确保正确编码引号以用作HTML属性值。
然而,可能有更好的方法来做你正在做的事情,而不是将数千条记录传回浏览器,以便浏览器可以将它们返回给服务器。您可能最好暂时将行存储在$_SESSION
中,而不是传递给隐藏的输入。在某些情况下,只有在收到表单帖子时才重新查询那么多行,而不是让浏览器将它们传回去,这可能会更快。
如果您使用serialize()
在PHP中序列化行,我假设您打算在PHP中unserialize()
使用它们。这样做时要格外小心,因为这样可能会导致浏览器发回恶意数据,而这些数据会反序列化为对您的应用程序有害的内容。如果必须将序列化数据从浏览器发送到unserialize()
,请确保验证您收到的对象或阵列 - 确保它包含您期望的所有键或属性,并且仅那些你希望你在迭代它时没有问题。