1

我正在使用 **MySQL 的 LOAD DATA INFILE命令将 CSV 文件**e 导入我的数据库。该文件不一定是UTF-8 编码的,我对此没有任何控制权,所以我必须求助于预处理/后处理。我的数据库和 HTML 网页都强制执行 UTF-8 编码。由于我确实加载了数据文件,因此我必须对此进行后期处理。所以我从数据库中提取信息并使用 htmlentities 应用我的后处理过滤器。

   foreach($records as $r)
       $updates[] = htmlentities($r["column"], ENT_COMPAT, 'UTF-8');

然后我再次更新数据库表。

列在后处理之前进入表中,但之后,列变为空白,这意味着 htmlentities 返回空白,这是 HTML 的有效返回值。

具体来说,候选值为:

“PJ 防风雨 32 ®”

知道为什么吗?

4

1 回答 1

2

您调用中的“UTF-8”参数承诺htmlentities()传入的数据将是 UTF-8。当数据不是时,这将导致函数返回一个空白值。

您需要尝试嗅探编码,这是一个不可靠的过程,并且只有在您拥有非常有限的一组可能的编码时才能正常工作。参见例如这个答案。

无论哪种方式,您都可以摆脱htmlentities()调用 - 它无济于事,只是在不需要的地方添加 HTML 实体。

于 2013-07-12T07:40:24.543 回答