【问题标题】:CSV to array encoding charactersCSV 到数组编码字符
【发布时间】:2016-02-03 08:15:40
【问题描述】:

我有一个来自远程的 csv,csv 中的列有重音字符,我的目标是将此 csv 转换为关联数组,如下所示:

/*------------------------------------
* CONVERT CSV FILE TO ARRAY
* @params $filename
* return array
------------------------------------*/
function csv_to_array($filename = '', $delimiter=';')
{

    if(!file_exists($filename) || !is_readable($filename))
        return FALSE;

    $header = NULL;
    $data = array();
    if (($handle = fopen($filename, 'r')) !== FALSE)
    {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {
            $d = array_map("utf8_encode", $row);
            if(!$header)
                $header = $d;
            else if( count($header) == count($row) )
                $data[] = array_combine($header, $row);
        }
        fclose($handle);
    }
    return $data;
}

输出是:

if( file_exists('fic.csv')) $csv_to_array = csv_to_array('fic.csv');
/*------------------------------------
* PRINT OUT CSV
------------------------------------*/
foreach($csv_to_array as $key => $value ){
    $country = $value['country'];
    echo $country;
}

它输出带有非编码字符的国家名称: 曼谷 - P�kin - San Jos�

将那些非编码字符插入数据库时​​会产生错误,我该如何处理插入?请给个主意?

谢谢。

【问题讨论】:

    标签: php arrays csv


    【解决方案1】:

    您必须为文件指定编码。使用stream_encoding函数:

    stream_encoding($handle, "UTF-8"); // or whatever the input is encoded in
    

    【讨论】:

    • $handle 指的是您示例中的同名变量,即流。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2013-07-19
    • 2011-03-19
    相关资源
    最近更新 更多