使用HTML实体进行UTF-8转义返回空白


UTF-8 escaping with HTMLentities returns blank

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

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

然后我再次更新DB表。

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

具体来说,候选值是:

"PJ Weatherproof 32®"

知道为什么吗?

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

您需要尝试并探查编码,这是一个不可靠的过程,只有在可能的编码集非常有限的情况下才能正常工作。例如,请参见此答案。

无论哪种方式,您都可以取消htmlentities()调用——它对这种情况没有任何帮助,只是在不需要的地方无用地添加HTML实体。