'🔔 审批通知', 'content' => '📋 您有一个新的审批申请待处理', 'status' => '✅ 通过', 'elements' => [ ['tag' => 'text', 'text' => '📅 时间: 2026-03-01'], ['tag' => 'text', 'text' => '👤 申请人: 张三'], ] ]; echo "原始数据:\n"; print_r($testData); echo "\n"; // 使用 JSON_UNESCAPED_UNICODE 编码 $encoded = json_encode($testData, JSON_UNESCAPED_UNICODE); echo "JSON_UNESCAPED_UNICODE 编码结果:\n"; echo $encoded . "\n\n"; // 检查 emoji 是否被转义 $hasEscapedEmoji = strpos($encoded, '\\u') !== false; if ($hasEscapedEmoji) { echo "❌ FAIL: Emoji 被转义了!\n"; } else { echo "✅ PASS: Emoji 保持原样\n"; } echo "\n"; // 测试2: 验证 HttpClient 的编码 echo "测试2: HttpClient 编码测试\n"; echo "----------------------------------------\n"; // 使用反射访问 HttpClient 的 httpPost 方法,但不实际发送请求 // 我们只验证 JSON 编码部分 $testPayload = [ 'receive_id' => 'test_user', 'msg_type' => 'interactive', 'content' => [ 'card' => [ 'header' => [ 'title' => [ 'content' => '🔔 审批通知', 'tag' => 'plain_text' ] ], 'elements' => [ ['tag' => 'text', 'text' => '📋 请审批'] ] ] ] ]; echo "测试 payload:\n"; echo json_encode($testPayload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n\n"; // 模拟 HttpClient 的编码过程 $jsonPayload = json_encode($testPayload, JSON_UNESCAPED_UNICODE); echo "HttpClient 编码后的 JSON:\n"; echo $jsonPayload . "\n\n"; // 验证 emoji 没有被转义 $emojis = ['🔔', '📋', '✅', '📅', '👤']; $allEmojiIntact = true; foreach ($emojis as $emoji) { if (strpos($jsonPayload, $emoji) === false) { echo "❌ Emoji {$emoji} 未找到或被转义\n"; $allEmojiIntact = false; } } if ($allEmojiIntact) { echo "✅ PASS: 所有 emoji 保持原样\n"; } else { echo "❌ FAIL: 部分 emoji 被转义\n"; } echo "\n"; // 测试3: 对比默认编码和修复后的编码 echo "测试3: 编码方式对比\n"; echo "----------------------------------------\n"; $testString = ['emoji' => '🔔 通知']; $defaultEncoded = json_encode($testString); $fixedEncoded = json_encode($testString, JSON_UNESCAPED_UNICODE); echo "默认编码: " . $defaultEncoded . "\n"; echo "修复编码: " . $fixedEncoded . "\n\n"; if ($defaultEncoded !== $fixedEncoded) { echo "检测到差异:\n"; echo "- 默认编码将 emoji 转义为 Unicode 序列\n"; echo "- 修复后编码保持 emoji 原样\n"; if (strpos($fixedEncoded, '🔔') !== false) { echo "\n✅ PASS: 修复成功\n"; } } echo "\n"; echo "====================================\n"; echo "测试完成\n"; echo "====================================\n";