我正在研究一个电报机器人,它将电话号码发送到我的电报帐户。问题是,' +'转换为' '空白。所以每个电话号码都是错的。
例如
' + 49157.33亿'变成' 4915733000000'。我尝试使用HTML代码&#43 unicode版本\ u002B和url编码caracter%2B,但没有一个工作。
https://api.telegram.org/botTOKEN/sendMessage?chat_id=MYID&text=Test:\u2031 Unicode:\u002B HTML:+ URL:%2B
结果:测试:‱Unicode:HTML:
您是否知道发送加号的可能性?
谢谢!
答案 0 :(得分:0)
您的“HTML:& 43;”可以解析为URL参数拆分器,使用%26
代替&
可能有效。
顺便说一下,您应该在网址中使用+
(加号)代替(空格)。
答案 1 :(得分:0)
可以使用POST方法发送加号。
这是示例Google App脚本代码(可以轻松地适应JavaScript)。
var options = {
method : "post",
payload: {
method: "sendMessage",
chat_id: "<chat_id_here>",
text: "+something",
parse_mode: "HTML"
}
};
var response = UrlFetchApp.fetch("https://api.telegram.org/bot<YOUR_TOKEN>/", options);
答案 2 :(得分:0)
我有同样的问题。我正在使用Java和Spring的WebClient。使其起作用的唯一方法是使用WebClient
构建DefaultUriBuilderFactory
并将编码模式设置为NONE
。
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(url);
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
WebClient webClient = WebClient.builder().uriBuilderFactory(factory).filter(logRequest()).build();
默认值为EncodingMode.TEMPLATE_AND_VALUES
,因此如果将+
替换为%2B
,则结果URL为%252B。将编码模式设置为NONE
不会替换任何特殊字符,因此我不得不手动替换它们。
private String replaceUrlSpecialCharacters(String message) {
return message.replace("%", "%25").replace("+", "%2B").replace(" ", "%20").replace("|", "%7C").replace(System.lineSeparator(), "%0A");
}
现在我的邮件中显示了+
符号。
答案 3 :(得分:0)
我使用的是 PHP,这个案例是用 rawurlencode 解决的。代码如下:
public function send_message($tg_msg)
{
$tg_token = ''; // Bot Token
$chat_id = ''; // Chat ID
$url = 'https://api.telegram.org/bot' . $tg_token . '/sendMessage?parse_mode=markdown&chat_id=' . $chat_id;
$curlopt_url = $url . '&text=' . rawurlencode($tg_msg);
$ch = curl_init();
$optArray = array(
CURLOPT_URL => $curlopt_url,
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($ch, $optArray);
curl_exec($ch);
curl_close($ch);
}
$msg = 'The message';
send_message($msg);
现在 + 号显示在我的消息中。