0

我有以下代码:

$poststr = "param1=<html><head></head><body>test1 & test2</body></html>&param2=abcd&param3=eeee";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.mytest.com");
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $poststr);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlData = curl_exec($curl);

该帖子不起作用,我猜这与 param1 中包含 HTMl 的事实有关。但如果我使用htmlentities()它并没有帮助。我试过使用urlencode()但还是不行。

4

1 回答 1

0

不要忘记这&是一个特殊的 URL 分隔符。
在您的示例<body>test1 & test2</body>中被解释错误。
$poststr必须仔细进行urlencoded。这是正确的方法:

$poststr = "param1=".rawurlencode('<html><head></head><body>test1 & test2</body></html>')."&param2=abcd&param3=eeee";

你应该对它的所有部分进行编码:param2 和 param3。
最简单的方法是使用数组和html_build_query ():

$params = array();
$params['param1'] = '<html><head></head><body>test1 & test2</body></html>';
$params['param2'] = 'abcd';
$params['param3'] = 'eeee';

//or
//$params = array( 'param1' => '<html><head></head><body>test1 & test2</body></html>',
//                 'param2' => 'abcd',
//                 'param3' => 'eeee'
//               );

$poststr = html_build_query($params);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.mytest.com");
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $poststr);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlData = curl_exec($curl);
于 2013-04-23T06:51:33.037 回答