我正在尝试向电报机器人发送消息。确实是name变量不允许我这样做。
$arr = array(
$phoneFieldset => $phone,
$nameFieldset => $name,
$messageFieldset => $message,
);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b> ".$value."%0A";
};
$request = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}";
echo $request;
$sendToTelegram = fopen($request,"r");
当脚本失败时,请求回显输出:
https://api.telegram.org/botMYTOKEN/sendMessage?chat_id=-449128489&parse_mode=html&text=Телефон: 123%0AИмя: de%0AСообщение: 123213%0A
警告:fopen(https://api.telegram.org/botMYTOKEN/sendMessage?chat_id=-449128489&parse_mode=html&text= Телефон: 123%0A Имя: de%0A Сообщение: 123213%0A):无法打开流:HTTP请求失败!第61行的C:\ nginx \ html \ scripts \ php \ send-message-to-telegram.php中的HTTP / 1.1 400错误请求 Ошибка。 Сообщениенеотправлено!
第61行是包含fopen()
的行。
脚本工作时请求回显输出:
https://api.telegram.org/botMYTOKEN/sendMessage?chat_id=-449128489&parse_mode=html&text=Телефон: 123123%0AСообщение: 1213123%0A
答案 0 :(得分:0)
这里的主要问题是您需要将西里尔字母编码为URL实体。您可以使用rawurlencode($txt)
进行操作。查看下面的完整代码:
$arr = array(
$phoneFieldset => $phone,
$nameFieldset => $name,
$messageFieldset => $message,
);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b> ".$value."%0A";
};
$txt = rawurlencode($txt) // To encode cyrillic entities
$request = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}";
echo $request;
$sendToTelegram = fopen($request,"r");
P.S。摘自@ ed-lucas评论,以寻找其他人寻找答案。