PHP: Почему в телеграм бот публикует текст со сломанной кодировкой?

Рейтинг: 1Ответов: 1Опубликовано: 28.04.2023

Сделал telegram-бот с вебхуком. Если пользователь выбирает в боте определенную команду, то размещенный на сервере скрипт, с которым связан вебхук должен ответить в чат текстовым сообщением на кириллице..

Увы, получается вот так:

введите сюда описание изображения

скрипт файла, на который прокидывается вебхук такой:

$textMessage = "Вы помните знаменитое стихотворение Бориса Пастернака Во всем мне хочется дойти... Введите первую строчку стихотворения, а ПопугайПастернака подскажет вам следуюдующу. Сможете дойти вместе с ботом до конца стихотворения?";

$textMessage = urlencode($textMessage);
$urlQuery = "https://api.telegram.org/bot". $token ."/sendMessage?chat_id=". $chat_id ."&text=" . urlencode($textMessage);
$result = file_get_contents($urlQuery);

Интересно, что какое-либо сообщение пишется только если дважды сделать urlencode() с $textMessage, в противном случае bad request отдает.

введите сюда описание изображения

определил кодировку $textMessage в файле, реагирующем на хук, там она UTF-8. Специалисты, не подскажете, что можно предпринять?

Ответы

▲ 1

После энного количества мучений, вот так заработало:

$pl = iconv("CP1251", "UTF-8", "Заработаю я когда-то или нет");
//$pl = urlencode($pl);
$data = ["text" => $pl];
        $ch = curl_init('https://api.telegram.org/bot/sendMessage?chat_id=');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        $result = json_decode(curl_exec($ch));
        $curlErr = curl_error($ch);
        print_r($result);

url кодирование кириллицы не понадобилось, наверное, телега как-то это сама делает, ну и использовал пост, а не гет