php没有收到编码的$ _GET值

时间:2013-05-06 21:49:42

标签: php curl get openssl urlencode

我有一个使用公钥加密然后编码的字符串,它就像200个字符。

SENDER:
$pubkey = file_get_contents('http://localhost/test/key.pub');
openssl_public_encrypt('hello world', $encrypted, $pubkey);
$first = $encrypted;
$url = 'http://localhost/demo_project/bank/?secure='.urlencode($first);
echo file_get_contents($url);

RECIEVER:
var_dump($_GET);

输出:

array(1) { ["secure"]=> string(0) "" }

安全是secure=Qq%B8%143%F5%D1%15%C4%18%95g%D6%D0%2F%2CH%25%F8%A8%17%EF%2Bl%80%3Bc%9E%F2%9A%FB%CF3%EDj%B7%26%0F%A0%5E%1DM%AB%07%1Db%0F%C3%9E%A1%FF%82%7D%E50%15Vc%08t%0F%07%0Ag

最奇怪的是,如果secure=Qq%B,一切正常,但如果secure=Qq%B8,我们就会遇到问题。

我也像here一样尝试卷曲,但它也没有任何好处。有人会指出我的错误并提出解决方案吗?

1 个答案:

答案 0 :(得分:0)

  

base64 编码旨在使二进制数据在传输过程中幸存   传输不是8位干净的图层

您必须编码openssl_public_encrypt()的二进制输出数据。

发信人:

$pubkey = file_get_contents('http://localhost/test/key.pub');
openssl_public_encrypt('hello world', $encrypted, $pubkey);
$first = base64_encode($encrypted);
$url = 'http://localhost/demo_project/bank/?secure='.urlencode($first);
echo file_get_contents($url);

接收器:

var_dump($_GET);
$secure = base64_decode($_GET['secure']);

我会使用POST

$url = 'http://localhost/demo_project/bank/';
$postdata = array("secure" => $first);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata) );
echo $response = curl_exec($ch);

curl_close($ch);