使用 PHP fgetcsv() 函数管理数据时出现错误 "Undefined offset" 和 "invalid byte sequence for encoding UTF8"
Errors "Undefined offset" and "invalid byte sequence for encoding UTF8" while managing data with PHP fgetcsv() function
我需要从编码为 ISO-8859-1 的 .csv 文件中读取一些数据并将其内容放入编码为 UTF-8 的 PostgreSQL 数据库中,我收到两个错误,具体取决于行我正在处理的文件。
我正在使用 fgetcsv() 函数从文件中获取数据:
while (($line = fgetcsv($handle,0,';','"')) !== false) {
错误是 "Undefined offset" 在我调用这样的函数的行上:
$foo = my_function($file_line[$index]);
当我尝试将数据插入我的 PostgreSQL table 时发生错误 "invalid byte sequence for encoding UTF8"。
该文件包含复杂的数据,包括日期字段、数字字段和带有特殊字符和重音的多行文本字段,即使为空,所有行都有所有字段。
错误 "undefined offset" 的发生是因为数组没有通知索引。但它应该有(所有文件行都有所有字段)。
真正的问题出在 fgetcsv 函数中,我没有设置 "escape character" 并且文本中的字段末尾有一个斜杠(默认转义字符),这使得fgetcsv 函数不考虑定界符,弄乱了数组数据。
这已通过将不寻常的字符设置为 "escape chararcter" 解决,如下所示:
while (($line = fgetcsv($handle,0,';','"','')) !== false) {
"invalid byte sequence for encoding UTF8" 错误已通过从数据中删除所有非常规字符然后使用以下命令转换为 UTF-8 解决:
$field_content = preg_replace('/[^\x{0020}-\x{007E}\x{00c0}-\x{00fd}\x{000a}\x{0009}]/', '',$field_content);
$field_content = utf8_encode($field_content);
我需要从编码为 ISO-8859-1 的 .csv 文件中读取一些数据并将其内容放入编码为 UTF-8 的 PostgreSQL 数据库中,我收到两个错误,具体取决于行我正在处理的文件。
我正在使用 fgetcsv() 函数从文件中获取数据:
while (($line = fgetcsv($handle,0,';','"')) !== false) {
错误是 "Undefined offset" 在我调用这样的函数的行上:
$foo = my_function($file_line[$index]);
当我尝试将数据插入我的 PostgreSQL table 时发生错误 "invalid byte sequence for encoding UTF8"。
该文件包含复杂的数据,包括日期字段、数字字段和带有特殊字符和重音的多行文本字段,即使为空,所有行都有所有字段。
错误 "undefined offset" 的发生是因为数组没有通知索引。但它应该有(所有文件行都有所有字段)。
真正的问题出在 fgetcsv 函数中,我没有设置 "escape character" 并且文本中的字段末尾有一个斜杠(默认转义字符),这使得fgetcsv 函数不考虑定界符,弄乱了数组数据。
这已通过将不寻常的字符设置为 "escape chararcter" 解决,如下所示:
while (($line = fgetcsv($handle,0,';','"','')) !== false) {
"invalid byte sequence for encoding UTF8" 错误已通过从数据中删除所有非常规字符然后使用以下命令转换为 UTF-8 解决:
$field_content = preg_replace('/[^\x{0020}-\x{007E}\x{00c0}-\x{00fd}\x{000a}\x{0009}]/', '',$field_content);
$field_content = utf8_encode($field_content);