e13574f6f1
- 添加 updateMessageCardsForPartialApprove 方法处理会签部分通过 - 会签一人通过后,其他人的消息卡片显示进度并保留按钮 - 修复 Dockerfile 构建顺序问题 - 修复前端类型定义问题 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
127 lines
3.4 KiB
PHP
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";
|