PHP代码内字符串换行正常,POST传参后Telegram无法解析换行
PHP中Telegram Bot换行问题:直接定义字符串vs表单POST传参的差异与解决办法
差异原因
- 直接定义的双引号字符串:PHP会自动解析其中的转义序列
\n,将其转换为实际的换行符(ASCII 10)。Telegram收到这个真实换行符后,能正确识别并换行显示。 - 表单POST传递的字符串:提交的
\n是字面量的两个字符(反斜杠+字母n),PHP不会对POST参数自动进行转义序列解析,所以Telegram接收到的是普通文本内容,自然会把\n当作普通字符显示。
解决办法
方法1:替换字面量\n为实际换行符
直接将POST内容中的字面量\n替换成PHP能识别的换行符,适合只需要处理换行的场景:
$dynamicMessage = trim($_POST["updatemessage"]); // 替换字面量\n为实际换行符 $dynamicMessage = str_replace('\n', "\n", $dynamicMessage); $params = array( 'chat_id' => $chatId, 'text' => $dynamicMessage, 'parse_mode' => 'HTML' );
方法2:替换为HTML换行标签<br>
因为你设置了parse_mode => 'HTML',也可以将\n替换为Telegram支持的HTML换行标签,效果一致:
$dynamicMessage = trim($_POST["updatemessage"]); $dynamicMessage = str_replace('\n', '<br>', $dynamicMessage); $params = array( 'chat_id' => $chatId, 'text' => $dynamicMessage, 'parse_mode' => 'HTML' );
方法3:批量解析转义序列
如果POST内容中包含其他转义字符(如\t、\"),可以用stripcslashes()函数一次性解析所有C风格转义序列:
$dynamicMessage = stripcslashes(trim($_POST["updatemessage"])); $params = array( 'chat_id' => $chatId, 'text' => $dynamicMessage, 'parse_mode' => 'HTML' );
内容的提问来源于stack exchange,提问作者Tazz
相关产品推荐
相关产品推荐

