URL-адрес sendPhoto Telegram Bot API содержит такие символы, как правая одинарная кавычка (') - PullRequest
0 голосов
/ 29 мая 2020

Я использую стандартный Telegram Bot API для отправки сообщений. Когда URL-адрес фотографии содержит специальный символ, такой как правая одинарная кавычка (') и левая одинарная кавычка ('), сообщение не отправляется, поскольку это неверный запрос. При запуске php rawurlencode отображается как %E2%80%99, а как %E2%80%98

$photourl='https://example.com/some/path/name-of-image-with‘quotes’.jpg';
$array =[
'chat_id' => $uid,
'photo' => $photourl,
'caption' => $caption
];
file_get_contents("https://api.telegram.org/bot$api/sendPhoto?".http_build_query($array) ); 

, это дает

PHP ВНИМАНИЕ - не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 Неверный запрос

1 Ответ

1 голос
/ 30 мая 2020

Попробуйте следующее:

$photourl = 'https://example.com/some/path/name-of-image-with‘quotes’.jpg';
$filename = basename($photourl);
$photourl = str_replace($filename, urlencode($filename), $photourl); //Replace file name wirth url encoded filename

$array = [
    'chat_id' => $uid,
    'photo' => $photourl,
    'caption' => $caption
];
file_get_contents("https://api.telegram.org/bot$api/sendPhoto?" . http_build_query($array));

Использование таких символов, как , или * в параметре photo, кажется, вызывает проблему.

У меня нет никаких объяснений, почему возникает эта ошибка или как ее исправить. Но вы можете URL-адрес кодировать часть имени файла URL-адреса, прежде чем передавать свой запрос в http_build_query() (который закодирует его даже во второй раз).

...