php - 从 AWS DynamoDB 检索 PHP 页面中的数据中删除的 XML 标签
问题描述
绘制一个 PHP 页面以从 DynamoDB 表中提取数据。该页面使用 XML 数据提取一个字段submissionMessageSent
,并显示两次。
- 第一次出现:看起来像缺少 XML 标记的数据。
- 第二次出现:看起来像带有 XML 标记的数据。
在两次出现之间,页面中的代码不会更新变量。数据在 Dynamo 中存储为带有标签的大字符串。
为什么在一种情况下去除 XML 标记,而在另一种情况下不去除?
<html>
<head>
<title>Spyglass</title>
<link rel="stylesheet" type="text/css" href="./style.css">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="get">
Submission Identifier: <input name="submission_id" type="submission_identifier" size="45" value="<?php $submissionId ?>"/>
<input type="submit">
</form>
<?php
date_default_timezone_set('UTC');
$configs = include('./config.php');
require './vendor/autoload.php';
use Aws\DynamoDb\Exception\DynamoDbException;
use Aws\DynamoDb\Marshaler;
if ( isset($_GET["submission_id"]) && $_GET["submission_id"] != "" ) {
$aws_credentials = new Aws\Credentials\Credentials(
$configs['aws_account_key'],
$configs['aws_account_secret']
);
$sdk = new Aws\Sdk([
'region' => $configs['aws_region_identifier'],
'version' => "2012-08-10",
'credentials' => $aws_credentials
]);
$dynamodb = $sdk->createDynamoDb();
$marshaler = new Marshaler();
$ddb_query_predicate = '{":id": "' . $_GET["submission_id"] . '"}';
$eav = $marshaler->marshalJson($ddb_query_predicate);
$params = [
'TableName' => "Orders",
'KeyConditionExpression' => '#submissionId = :id',
'ExpressionAttributeNames'=> ["#submissionId" => "submissionId"],
'ExpressionAttributeValues' => $eav
];
try {
$submissionQueryResponse = $dynamodb->query($params);
$submission = $submissionQueryResponse['Items'][0];
$submissionObject = $marshaler->unmarshalItem($submission, true);
// Extract the message sent to the ERP system by the preprocessor
$submissionMessageSent = $submissionObject->submissionMessageSent;
echo "<p><b>1:</b> $submissionMessageSent</p>";
echo <<<EOT
<textarea id="sent" wrap="off" placeholder="Sent" rows="20" cols="75">$submissionMessageSent</textarea>
EOT;
} catch (DynamoDbException $e) {
echo "Unable to query:\n";
echo $e->getMessage() . "\n";
}
}
?>
</body>
</html>
注意:完全披露。为了不泄露敏感信息,我不得不抽出部分页面代码。如果我在清洗的某个地方漏掉了一个标签,请不要把我钉在十字架上。你明白我的问题的要点。
解决方案
您的 XML 被呈现为 HTML,它们被网络浏览器忽略。可以在 textarea 中看到它们,因为这将转义标签的字符。
查看原始 html 输出时,这些标签将在那里。
推荐阅读
- database - 如何将数据发布到短信服务器(如果没有互联网),然后从短信服务器发送回网络服务器?
- java - 如果在使用 java 的字符串中找不到结束标记,如何转义 html 标记?
- ios - 如何在编译和轻松管理方面最好地管理 Swift Package Manager 依赖项?
- windows - Docker Desktop 不会切换到 Windows 容器(在 Windows 10 上)
- c++ - 调整二维点向量的大小以匹配调整大小的图像?
- ios - 有什么方法可以快速检查从 UIActivityViewController 成功发送的消息吗?
- ios - 如何显示 SwiftUI 视图而不是 UIViewController?
- spring-batch - Spring Batch 和 Spring Cloud 数据流教程
- azure - 如何在导入 Azure 数据工厂时限制/过滤 CSV 文件的源列
- numpy - 将 sum(...) 转换为 numpy