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

PHP批量处理confusables.txt生成Unicode字符映射表格问题

修正方案

核心问题定位

  1. 原代码仅针对单个硬编码目标字符串,未遍历所有拉丁大写字母的匹配规则
  2. Unicode字符处理未使用多字节安全函数,导致字符解析错误、混排
  3. 缺少分组存储结构,无法按原拉丁字母归类,只能输出单行内容

修正后的PHP实现

<?php
// 定义目标文件路径
$filePath = 'confusables.txt';
// 初始化分组数组,按拉丁大写字母存储混淆字符
$groups = [];

// 逐行读取文件
$handle = fopen($filePath, 'r');
if ($handle) {
    // 正则匹配规则:提取原拉丁大写字母、混淆字符的Unicode编码
    $pattern = '/U\+([0-9A-F]{4,6}) ; LATIN CAPITAL LETTER ([A-Z]) ; U\+([0-9A-F]{4,6})/';
    
    while (($line = fgets($handle)) !== false) {
        // 跳过注释或空行
        if (trim($line) === '' || str_starts_with($line, '#')) {
            continue;
        }
        
        if (preg_match($pattern, $line, $matches)) {
            $originalLetter = $matches[2];
            // 将Unicode编码转换为实际字符(多字节安全)
            $confusableChar = mb_chr(hexdec($matches[3]), 'UTF-8');
            // 按原字母分组存储
            $groups[$originalLetter][] = $confusableChar;
        }
    }
    fclose($handle);
    
    // 按字母顺序排序分组
    ksort($groups);
    
    // 生成按字母分组的Markdown表格
    foreach ($groups as $letter => $chars) {
        echo "## 拉丁大写字母 $letter\n";
        echo "| 原字母 | 混淆字符 |\n";
        echo "|--------|----------|\n";
        foreach ($chars as $char) {
            // 转义Markdown特殊字符(如果有)
            $escapedChar = htmlspecialchars($char);
            echo "| $letter | $escapedChar |\n";
        }
        echo "\n";
    }
} else {
    die('无法打开文件:' . $filePath);
}
?>

关键修正点说明

  • 分组逻辑:用$groups数组按原拉丁字母(A-Z)归类混淆字符,解决单行输出问题
  • Unicode安全处理:使用mb_chr函数转换Unicode编码为字符,避免多字节字符解析错误导致的混排
  • 正则匹配优化:精准匹配confusables.txt的行格式,提取所需的原字母和混淆字符编码
  • 排序输出:对分组数组按字母顺序排序,保证输出的表格按A-Z顺序排列

示例输出效果

## 拉丁大写字母 A
| 原字母 | 混淆字符 |
|--------|----------|
| A | Α |
| A | А |

## 拉丁大写字母 B
| 原字母 | 混淆字符 |
|--------|----------|
| B | В |

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:00:49