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); ?>
验证步骤
- 替换脚本后重新触发Callback请求
- 查看日志确认链接标题编码恢复正常
- 对比
wall.get接口返回的标题内容,确保转码结果一致
内容的提问来源于stack exchange,提问作者Ikenitenine
相关产品推荐
相关产品推荐

