Telegram Bots:编码加字符/加号

时间:2017-05-22 09:45:29

标签: character-encoding telegram-bot

我正在研究一个电报机器人,它将电话号码发送到我的电报帐户。问题是,' +'转换为' '空白。所以每个电话号码都是错的。 例如
' + 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:

您是否知道发送加号的可能性?

谢谢!

4 个答案:

答案 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);

现在 + 号显示在我的消息中。