-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);
?>

2ページ目:

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

これは自動的に行われるため、 htmlspecialcharsur呼び出しをデコードする必要がないことに注意してください。urlencode

于 2012-06-26T13:29:17.453 に答える
1

URLの特定の文字は+、スペースを表すなど、特別なものです。URLを介して任意のデータを送信するには、データに含まれる文字が「特殊文字」として認識されないように、 URLをエスケープする必要があります。データをHTMLに変換するため、URLエンコードされたデータ内の文字が特殊なHTML文字として認識されないように、データを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 に答える