URLENCODE在curl-PHP中如何处理参数?

URLENCODE在curl-PHP中如何处理参数?,php,curl,telegram,telegram-bot,urlencode,Php,Curl,Telegram,Telegram Bot,Urlencode,我对urlencode有一个非常奇怪的问题,现在我解释一下: 我有一个电报机器人用url向我发送消息,因此我想添加urlencodefot文本,我将粘贴到url中 但是如果使用CURLOPT_POSTFIELDS我有一个奇怪的问题 要发送的消息是: This is an example my friend 但如果使用urlencode和CURLOPT_POSTFIELDS则输出为: This+is+an+example+my+friend 现在我显示完整的代码: $notific

我对
urlencode
有一个非常奇怪的问题,现在我解释一下:

我有一个电报机器人用url向我发送消息,因此我想添加
urlencode
fot文本,我将粘贴到url中

但是如果使用
CURLOPT_POSTFIELDS
我有一个奇怪的问题


要发送的消息是:

  This is an example my friend
但如果使用
urlencode
CURLOPT_POSTFIELDS
则输出为:

  This+is+an+example+my+friend

现在我显示完整的代码:

$notifica= urlencode("This is an example my friend");
sendMessage(xxx, $notifica);
sendMessage_2($notifica);


function sendMessage($chat_id, $message){           
   $params=[
    'chat_id' => $chat_id,
    'parse_mode' => 'HTML',
    'text' => $message
   ];

   $url= 'https://api.telegram.org/botxxx';
   $ch = curl_init($url);
   curl_setopt($ch, CURLOPT_HEADER, false);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3500);
   curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3500);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   $result = curl_exec($ch);
   curl_close($ch); 
}

function sendMessage_2($mess){          
    $url= 'https://api.telegram.org/botxxx/sendMessage?chat_id=xxx&parse_mode=HTML&text='.$mess;

    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3500);
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3500);
    $result = curl_exec($ch);
    curl_close($ch);    
}
我希望有人能帮助我。。。
非常感谢并为我的英语感到抱歉

尝试使用
curl\u setopt($ch,CURLOPT\u POSTFIELDS,http\u build\u query($params))

将参数放入带有
CURLOPT\u POSTFIELDS
的数组时,不要使用
urlencode()
。报告说:

如果
value
是数组,则内容类型标题将设置为多部分/表单数据


此格式不需要URL编码,因此服务器不会自动对其进行解码。因此,编码中使用的字符(空格编码为
+
,其他特殊字符使用
%
后跟十六进制代码)将按字面处理。

您的问题是什么
+
是在URL参数中对空格进行编码的方式。您不需要自己调用
urlencode()。当
$params
是一个数组时,
curl
会自动对其进行编码。哇,我不知道……虽然这段代码可以为OP的问题提供解决方案,但强烈建议您提供有关这段代码为什么和/或如何回答问题的其他上下文。从长远来看,纯代码的答案通常会变得毫无用处,因为未来遇到类似问题的观众无法理解解决方案背后的原因。