Files
x-server-mobile/backend/test_emoji_fix.php
T
root e13574f6f1 fix: 修复会签场景下消息卡片更新问题
- 添加 updateMessageCardsForPartialApprove 方法处理会签部分通过
- 会签一人通过后,其他人的消息卡片显示进度并保留按钮
- 修复 Dockerfile 构建顺序问题
- 修复前端类型定义问题

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:33:40 +08:00

127 lines
3.4 KiB
PHP

<?php
/**
* 测试 emoji 编码修复
* 验证 HttpClient 能正确处理 emoji 字符
*/
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/support/bootstrap.php';
use App\Util\HttpClient;
echo "====================================\n";
echo "测试 Emoji 编码修复\n";
echo "====================================\n\n";
// 测试1: 验证 JSON 编码包含 emoji
echo "测试1: JSON 编码测试\n";
echo "----------------------------------------\n";
$testData = [
'title' => '🔔 审批通知',
'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";