【发布时间】:2017-06-21 12:36:27
【问题描述】:
我们需要将包含错误变音符号的 CSV 文件导入 MySQL。
例如:使用非德语键盘的人输入U(ASCII 85)而不是Ü(ASCII 154)并使用ASCII 249添加两个高点,这对他来说是一样的。
MySQL 将此作为U? 写入数据库。这就是为什么我们希望 PHP 检测非 ASCII 字符组合,例如可打印的 ASCII 字符和扩展的 ASCII 字符的组合,这在现实世界中不存在,至少在主要语言中不存在。
我们尝试过的preg_replace 函数,没有检测到这个或者也检测到有效的变音符号。
preg_replace 有成功的机会还是有其他方法?
【问题讨论】:
-
您可以将这些组合与
preg_match_all('~\p{L}\p{M}+~u', $s, $m)匹配。但我怀疑您是否可以轻松地将它们替换为相应的宽字符 Unicode 字母。也许,您需要一个多字节到宽字符字母的映射。 -
当您阅读任何文本文件时,包括 CSV,您必须使用作者使用的字符编码。那么,CSV文件的编码是什么? (ASCII 没有编号为 154 或 249 的代码单元或代码点。)它是 IBM850 吗?正确读取文本后,您可以替换每个元音变音字符的不正确表示(“U¨”与“Ü”)。
标签: php preg-replace ascii