PHP Telegram sendMessage и символ "И"

Пишу бота для Telegram. Нужно отправлять сообщения из PHP в телегу. Имеется код:

  <?php 
        $token = "токен";
        $chat_id = "чатид";
    
        $txt='ФиО';
    
        $url = "http://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}";
        $result = fopen($url, "r");
    ?>

В таком виде он работает, но как только меняешь значение переменной $txt='ФИО' на заглавную букву "И", сразу получаем ошибку "failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request". На другие заглавные буквы такое не распространяется. Поясните как это работает и почему появляется ошибка?


Ответы (1 шт):

Автор решения: S.H.

Я думаю, дело в том, что все данные, которые вставляются в URL, должны быть url encoded.

Это - когда пробел заменется на %20 и т.п.

Когда Вы вставляете переменную $txt непосредственнов url запрос, посылаемый методом get, то сервер телеграмма воспринимает это как ошибку. Чтобы избежать этого - поменяйте $txt на urlencode($txt), а лучше - сделайте это и для других переменных:

$url = "http://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={urlencode($txt)}";

Напишите потом в комментарии, помогло ли это?

→ Ссылка