检测错误的书面变音符号
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 感知模式下处理字符串和模式。
我们需要将包含错误书写变音符号的 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 感知模式下处理字符串和模式。