我们需要将CSV文件导入包含错误书面变音符号的MySQL。
例如:使用非德语键盘的人输入Ü
(ASCII 85)而不是U
(ASCII 154),并使用ASCII 249添加了两个顶点,这看起来与他相同。 / p>
MySQL将此作为U?
写入数据库。这就是为什么我们希望PHP检测非ASCII字符组合,例如可打印ASCII字符和扩展ASCII字符的组合,这在现实世界中是不存在的,至少在主要语言中不存在。
我们尝试过的preg_replace
函数,不检测此函数或检测有效的变音符号。
有preg_replace
成功的机会还是其他方式?
答案 0 :(得分:1)
由于您希望使用PHP代码来检测基本字母后跟一个或多个变音符号的任意组合,您可以使用
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识别模式处理字符串和模式。
答案 1 :(得分:0)
这里有可能起作用的东西:
$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
答案 2 :(得分:0)
Wiktor(第一条评论)将其钉死。
我们不需要更换,只是警告对我们来说没问题,因为这种罕见的情况应该在CSV文件中修复。
'~\p{L}\p{M}+~u'
完成这项工作。