-1

我有一个通过 GET 接收 base64 编码数据的页面,它在隐藏的输入中打印数据,并通过 get 传递到另一个页面。

问题是这样的:当我通过

"Peuq/0X4XhFV+XNa8T06qFrP8lRadORUQBGJ1w6D4m33Jaqx/skKDEJIxjldBrcklboL/uB4C65cjz3BHMPmd3moEJ4GTK5k5Jwf9Ny4BA467bwgeaHJuOS+CjwFlIOzrhSWHTMVl4zWVvwMauuFAjhuMjOOj0/X5L12IcwGTTqLgHo"

通过 GET 它变成

"Peuq/0X4XhFV XNa8T06qFrP8lRadORUQBGJ1w6D4m33Jaqx/skKDEJIxjldBrcklboL/uB4C65cjz3BHMPmd3moEJ4GTK5k5Jwf9Ny4BA467bwgeaHJuOS CjwFlIOzrhSWHTMVl4zWVvwMauuFAjhuMjOOj0/X5L12IcwGTTqLgHo"

...所以 openssl 无法工作。我该如何解决?

4

2 回答 2

3

Base64 可以输出+在 URL 中发送时被解释为空格的符号。您可以使用urlencode来缓解这种情况:

<?php
$base64_data = $_GET['base64'];
$url_data = urlencode($base64_data);
$field_data = htmlspecialchars($url_data);
printf('<input type="hidden" value="%s" name="pass-it-on">', $field_data);
?>

在第二页:

<?php
$base64_data = $_GET['pass-it-on'];
$real_data = base64_decode($base64_data);
?>

请注意,无需解码您的htmlspecialchars调用urlencode,因为这是自动完成的。

于 2012-06-26T13:29:17.453 回答
1

URL 中的某些字符是特殊的,例如+代表空格。要通过 URL 发送任意数据,您需要对其进行URL 转义以避免数据中包含的字符被识别为“特殊字符”。由于您要将数据放入 HTML,因此您需要对其进行 HTML 转义以避免 URL 编码数据中的字符被识别为特殊的 HTML 字符。因此:

$data = /* some data */;
$base64Data = base64_encode($data);
$urlData = urlencode($base64Data);
$htmlData = htmlspecialchars($urlData);
printf('<input type="hidden" value="%s" name="pass-it-on">', $htmlData);
于 2012-06-26T14:03:15.753 回答