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 шт):
Я думаю, дело в том, что все данные, которые вставляются в 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)}";
Напишите потом в комментарии, помогло ли это?