我正在做一个网页,其中有一些数据用html表格可视化。我希望用户能够以Excel文档的形式检索数据,为此我使用了PHPExcel。数据存储在一个数组中,数组(数组第一行(第一列,...,最后一列),...,数组最后一行(第一列,...,最后一列))。因此,为了将数据传递给制作excel文件的datatoexcel.php,我将数组序列化并通过POST发送。
$functiondata = serialize($func[1]);
echo '<form action="datatoexcel.php" name="dataform" method="post">'.
'<input type=hidden name="functiondata" value="'.htmlspecialchars($functiondata).'">'.
'<input type="radio" name="format" value="xls" checked>xls'.
'<input type="radio" name="format" value="xlsx">xlsx'.
'</form>';
echo "<a href=\"#\" onclick=\"document['dataform'].submit()\">Export table data</a>";
然后在datatoexcel.php中检索数据。
$serialized_func = $_POST['functiondata'];
$funcdata = unserialize($serialized_func);
这在本地主机上工作得很好,但是当我在webserver上运行时,$funcdata似乎没有任何数据。本地主机运行Windows 7,使用Apache2和PHP 5.2.17,webserver运行Linux RedHat 5.2,使用Apache2和PHP 5.2.6。PHPExcel在web服务器上工作,我试着在datatoexcel.php中创建了一个硬编码数组,excel文档的结果很好。
你是否用完全相同的输入数据进行测试?另外,你的本地或远程服务器是否启用了magic_quotes?这可能也会干扰你的输入数据。
我想这可能与使用htmlspecialchars()有关。如果htmlspecialchars()转换了任何输入的字符,那么你必须在未序列化之前使用htmlspecialchars_decode($serialized_func)。
unserialize(htmlspecialchars_decode($serialized_func))。
最后,确保在脚本开始时设置error_reporting(E_ALL)。
在你的脚本的开始,你可能会发现一些警告。
我建议你使用json_encode和json_decode。它就像serialize或unserialize一样,但任何语言都可以实现它们。