我正在玩 Telegram 机器人开发。我唯一没有成功的是发送 unicode 字符。
我调用“sendMessage”api的方式是在php中使用curl:
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("chat_id" => $chat_id, "text" => "\u2b50"));
上面的代码应该在聊天中发布一个星形图标,而是显示确切的文本:
\u2b50
- 转义文本 ("\\u2b50") 不起作用。
- 如果机器人在客户端中键入“\u2b50”时充当回显(使用收到的文本回复),它会使用星号图标进行回复。
- 键盘键的行为相同(reply_markup.keyboard)
提前致谢
编辑:用 bobince 的解决方案解决(谢谢!)。
使用内联函数,如:
$text = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return iconv('UCS-4LE', 'UTF-8', pack('V', hexdec($match[1])));
}, $text);
或者
$text = preg_replace("/\\\\u([0-9a-fA-F]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", $text);