【发布时间】:2013-04-22 12:51:04
【问题描述】:
我有以下代码:
$poststr = "param1=<html><head></head><body>test1 & test2</body></html>¶m2=abcd¶m3=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(),但还是不行。
【问题讨论】:
-
试试htmlentities_encode?span>
-
把它当作一个数组试试。
$post['param1']='<html><head></head><body>test1 & test2</body></html>';等.. -
@Waygood 我需要设置这个吗?
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data")); -
你到底为什么要这样做?无论如何,问题是未编码的&符号。将数据构造为数组并通过
http_build_query()传递。您可以将数组直接传递给 cURL,但这样做会导致请求正文大于严格要求的内容(cURL 将其编码为multipart/form-data)。这可以说无关紧要,但我个人更喜欢控制发送到远程服务器的确切正文字符串。 -
@user838437 问题/评论是关于将 HTML 发送到另一台服务器的一般做法。一般来说,您应该发送编码形式所代表的数据,而不是编码形式。如果 HTML is 是数据,那很好 - 但这种情况很少见。无论哪种方式,每当你做这样的事情时,你应该使用一个数组和
http_build_query()- 它保证每次都能正确地转义,而且通常更容易使用