【发布时间】:2019-06-06 06:54:46
【问题描述】:
该应用程序基本上是这样工作的:
1) 用户上传 CSV 文件。
2) PHP 通过 POST 捕获文件。
3) 我用fopen() 打开文件并用fgetcsv() 读取文件。
第一列总是有\ufeff 字符。我知道这叫做 UTF-8 BOM,它是由 Microsoft Excel 生成的。但是,当我想删除它时,我不能。
我试过了:str_replace('\ufeff', '', $columns[0]);
【问题讨论】:
-
'\ufeff'不是有效的 C 转义符,无论如何也不能在单引号中工作。 -
0xFEFF是 UTF-16 大端字节序标记 (reference)。仅仅剥离它没有多大意义...... :-? -
@ÁlvaroGonzález 我完全不明白为什么我不能剥离它。
-
好吧...如果您的应用程序使用 UTF-8(正如您的问题所暗示的那样)并且您读取 UTF-16 文件并假设它是 UTF-8,那么您最终会得到损坏的数据(如果您将 UTF-8 字符与 UTF-16 字符合并),否则您将拥有一个正确的 UTF-16 流,因为它错过了字节顺序信息。
-
这已作为重复文件关闭,但链接的问题在此处不适用,因为我们正在讨论(强制性)UTF-16 BOM(UTF-8 BOM 是
0xEFBBBF,它是可选的。