You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:52:35