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

VK Callback API链接附件标题编码异常问题求助

VK Callback API链接附件Title编码乱码问题解决

问题现象

  • 接收VK Callback API的群组新帖请求时,帖子正文(['object']['text'])编码正常,但链接附件的标题(['attachments'][0]['link']['title'])出现乱码
  • 用VK API的wall.get接口获取同一帖子时,所有内容编码均正常
  • 当前接收脚本仅读取原始请求内容直接写入日志

原因分析

VK Callback API对不同字段的编码处理存在差异:正文已使用UTF-8编码,但链接附件的标题仍沿用VK早期默认的Windows-1251编码,直接读取原始内容不做转码就会出现乱码。

解决办法

方案1:全局转码原始请求内容

读取请求内容后,统一将Windows-1251编码转换为UTF-8,再处理或写入日志:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
header('Content-Type: text/html; charset=utf-8');

// 读取原始内容并转码
$data = file_get_contents('php://input');
$data = mb_convert_encoding($data, 'UTF-8', 'Windows-1251');

file_put_contents("log.txt", $data . PHP_EOL, FILE_APPEND);
?>

方案2:解析后单独转码标题字段

如果不想全局修改编码,可以解析JSON后仅对乱码的链接标题字段转码:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
header('Content-Type: text/html; charset=utf-8');

$data = file_get_contents('php://input');
$payload = json_decode($data, true);

// 遍历附件,转码链接标题
if (!empty($payload['object']['attachments'])) {
    foreach ($payload['object']['attachments'] as &$attachment) {
        if ($attachment['type'] === 'link' && isset($attachment['link']['title'])) {
            $attachment['link']['title'] = mb_convert_encoding($attachment['link']['title'], 'UTF-8', 'Windows-1251');
        }
    }
}

// 写入处理后的日志
file_put_contents("log.txt", json_encode($payload, JSON_UNESCAPED_UNICODE) . PHP_EOL, FILE_APPEND);
?>

验证步骤

  1. 替换脚本后重新触发Callback请求
  2. 查看日志确认链接标题编码恢复正常
  3. 对比wall.get接口返回的标题内容,确保转码结果一致

内容的提问来源于stack exchange,提问作者Ikenitenine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:35:24