如何在PHP页面间传递存储XML响应的$kxml变量
直接传递XML数据到下一页的几种方法
你不需要创建额外文件,有几种直接传递数据的可行方案,以下是具体实现:
方案1:使用PHP会话(Session)传递
Session是跨页面传递数据的常用方式,直接存储原始XML字符串比传递对象更可靠,在目标页面重新解析即可:
修改原页面代码:
// 开启会话(必须在所有输出之前调用) session_start(); $kycch = curl_init(); curl_setopt($kycch, CURLOPT_URL, $csckua_url); curl_setopt($kycch, CURLOPT_POSTFIELDS, $kycxml); curl_setopt($kycch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($kycch, CURLOPT_TIMEOUT, 20); $kycresult = curl_exec($kycch); $curl_errno = curl_errno($kycch); $curl_error = curl_error($kycch); curl_close($kycch); $kxml = simplexml_load_string($kycresult); if ($kxml['ret'] == 'Y') { // 将原始XML字符串存入Session $_SESSION['kyc_xml_data'] = $kycresult; header('Location: Kycresult.php'); exit; // 跳转后终止当前脚本,避免后续代码执行 } else { $ksuccess = 'Authentication Failed'; }
Kycresult.php页面代码:
session_start(); if (isset($_SESSION['kyc_xml_data'])) { // 重新解析XML字符串为SimpleXMLElement对象 $kxml = simplexml_load_string($_SESSION['kyc_xml_data']); // 提取数据并打印示例 echo "返回状态:" . $kxml['ret'] . "<br>"; // 其他数据提取操作,比如:echo "用户姓名:" . $kxml->user->name; // 用完销毁Session变量,避免数据残留 unset($_SESSION['kyc_xml_data']); } else { echo "未获取到有效认证数据"; }
方案2:通过自动提交表单传递(POST方式)
如果不想依赖Session,可以生成隐藏表单,通过JS自动提交XML数据到目标页面:
修改原页面代码:
$kycch = curl_init(); curl_setopt($kycch, CURLOPT_URL, $csckua_url); curl_setopt($kycch, CURLOPT_POSTFIELDS, $kycxml); curl_setopt($kycch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($kycch, CURLOPT_TIMEOUT, 20); $kycresult = curl_exec($kycch); $curl_errno = curl_errno($kycch); $curl_error = curl_error($kycch); curl_close($kycch); $kxml = simplexml_load_string($kycresult); if ($kxml['ret'] == 'Y') { // 输出自动提交表单 ?> <form id="autoSubmitForm" action="Kycresult.php" method="POST"> <!-- 用htmlspecialchars转义XML特殊字符,避免破坏表单结构 --> <input type="hidden" name="kyc_xml" value="<?php echo htmlspecialchars($kycresult); ?>"> </form> <script> // 页面加载后自动提交表单 document.getElementById('autoSubmitForm').submit(); </script> <?php exit; } else { $ksuccess = 'Authentication Failed'; }
Kycresult.php页面代码:
if (isset($_POST['kyc_xml'])) { // 还原转义后的XML字符串 $kyc_xml_data = htmlspecialchars_decode($_POST['kyc_xml']); $kxml = simplexml_load_string($kyc_xml_data); // 提取数据并打印 echo "认证成功,返回数据:<br>"; print_r($kxml); } else { echo "非法访问"; }
注意事项
- 传递XML字符串时必须用
htmlspecialchars()处理,避免特殊字符破坏页面结构或引发安全风险。 - 使用Session时,
session_start()必须放在所有HTML输出之前,否则会触发报错。 - 跳转或提交表单后,务必用
exit终止当前脚本,防止后续代码意外执行。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

