检测错误的书面变音符号

detect wrong written umlauts

我们需要将包含错误书写变音符号的 CSV 文件导入 MySQL。

例如:使用非德语键盘的人输入 U(ASCII 85)而不是 Ü(ASCII 154)并使用 ASCII 249 添加两个顶部点,这对他来说看起来一样.

MySQL 将此作为 U? 写入数据库。这就是为什么我们希望 PHP 检测非 ASCII 字符组合,例如可打印 ASCII 字符和扩展 ASCII 字符的组合,这种组合在现实世界中不存在,至少在主要语言中不存在。

我们已经尝试过的 preg_replace 函数,没有检测到这个或者也检测到有效的元音变音。

preg_replace有没有成功的机会,或者有其他方法吗?

以下是可能有用的东西:

$contents = str_replace(chr(85).chr(249),chr(154), file_get_contents("mycsv.csv"));

然后执行建议的操作,将您的数据库切换为 UTF-8 并执行:

$utfText = mb_convert_encoding($contents,"UTF-8","ISO-8859-1"); //I think that's the ISO standard you are referring to 

Wiktor(第一个评论)搞定了。

我们不需要替换,对我们来说只是一个警告就可以了,因为这种情况很少见,无论如何都应该在 CSV 文件中修复。

'~\p{L}\p{M}+~u'

完成任务。

由于您想使用 PHP 代码来检测基本字母后跟 1 个或多个变音符号的任意组合,您可以使用

if (preg_match('~\p{L}\p{M}~u', $s, $m)) {
    echo "There is a multibyte char here: " . $m[0];
}

注意:

  • \p{L} - 匹配任何 Unicode 字母
  • \p{M} - 匹配任何变音符号(组合标记)

u 修饰符启用 (*UTF)(*UCP) PCRE 标志,使 PCRE 引擎在 Unicode 感知模式下处理字符串和模式。