PHP 替换奇怪的 space

PHP replace weird space

我有 Excel 文件,我已将其转换为 CSV 文件。显然这个文件中有两种 spaces,常规的 space 和非中断的 space (我的假设).

将数据保存到数据库时,不间断 space 被保存为带有问号 (�) 的黑色菱形。

我一直在阅读,因为这可能已经有了解决方案,但是当我尝试它们时,什么也没有发生。

使用mb_substr方法:

$name = !empty($data[0]) ? mb_substr($data[0], 0, mb_strlen($data[0]), "UTF-8") : null;

使用 str_replace 方法:

$name = !empty($data[0]) ? str_replace(" ", " ", $data[0]) : null;

编辑

我正在为数据库使用 Oracle,这里是定义的字符集:

NLS_CHARACTERSET       = AL32UTF8
NLS_NCHAR_CHARACTERSET = AL16UTF16

这是一个示例数据:

,W.R.,

W前面的space是转化为问号的字符

如果您查看 Excel 程序的设置,看看是否可以建立原始文件的字符集,然后您可以上传文件并使用 PHP MB_convert_encoding函数将 Excel 保存为 UTF-8 的任何内容进行转换,或者更好的是直接从 Excel.

将其导出为 UTF-8

另请注意,如果您使用 MySQL,则 UTF8_ 字符集为 BROKEN,应改用 UTF8mb4

我能够通过 iconv 解决问题:

$name = !empty($data[0]) ? iconv("UTF-8", "ISO-8859-1//IGNORE", $data[0]) : null;