我有一个页面通过GET接收base64编码数据,它在隐藏的输入中打印数据,并通过get传递到另一个页面。
问题在于:当我通过时
"Peuq/0X4XhFV+XNa8T06qFrP8lRadORUQBGJ1w6D4m33Jaqx/skKDEJIxjldBrcklboL/uB4C65cjz3BHMPmd3moEJ4GTK5k5Jwf9Ny4BA467bwgeaHJuOS+CjwFlIOzrhSWHTMVl4zWVvwMauuFAjhuMjOOj0/X5L12IcwGTTqLgHo"
通过GET变成
"Peuq/0X4XhFV XNa8T06qFrP8lRadORUQBGJ1w6D4m33Jaqx/skKDEJIxjldBrcklboL/uB4C65cjz3BHMPmd3moEJ4GTK5k5Jwf9Ny4BA467bwgeaHJuOS CjwFlIOzrhSWHTMVl4zWVvwMauuFAjhuMjOOj0/X5L12IcwGTTqLgHo"
...所以openssl无法正常工作。我该如何解决?
答案 0 :(得分: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
来电,因为这是自动完成的。
答案 1 :(得分:1)
网址中的某些字符很特殊,例如代表空格的+
。要通过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);