curl PHP 中参数的 URLENCODE 如何工作?
How works URLENCODE for params in curl PHP?
我对 urlencode
有一个非常奇怪的问题,现在我解释一下:
我有一个电报机器人,它使用 url 向我发送消息,因此出于这个原因,我想添加 urlencode
我将粘贴到 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_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
当您将参数放入带有 CURLOPT_POSTFIELDS
的数组时,请不要使用 urlencode()
。 documentation 表示:
If value
is an array, the Content-Type header will be set to multipart/form-data.
此格式不需要 URL 编码,因此服务器不会自动对其进行解码。因此,编码中使用的字符(space 被编码为 +
,其他特殊字符使用 %
后跟十六进制代码)将按字面意思处理。
我对 urlencode
有一个非常奇怪的问题,现在我解释一下:
我有一个电报机器人,它使用 url 向我发送消息,因此出于这个原因,我想添加 urlencode
我将粘贴到 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_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
当您将参数放入带有 CURLOPT_POSTFIELDS
的数组时,请不要使用 urlencode()
。 documentation 表示:
If
value
is an array, the Content-Type header will be set to multipart/form-data.
此格式不需要 URL 编码,因此服务器不会自动对其进行解码。因此,编码中使用的字符(space 被编码为 +
,其他特殊字符使用 %
后跟十六进制代码)将按字面意思处理。