PHP导入带有BOM

时间:2016-02-22 09:03:44

标签: php csv utf-8

我正在尝试编写用于导入CSV文件的PHP脚本。

我正在使用此代码:

<form method="post" enctype="multipart/form-data">
<input type="file" name="f"><br>
<input type="submit" name="submit" value="Submit">
</form>

<?php
$row = 1;
if (($handle = fopen($_FILES['f']['tmp_name'], "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $data = array_map("utf8_encode", $data); //added
        $num = count($data);
        // Row
        $row++;
        for ($c=0; $c < $num; $c++) { 
                // Column      
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

脚本有效,但问题在于编码字符。在CSV文件中,内容使用拉脱维亚语,并且显示拉脱维亚字符不正确。

一些拉脱维亚文字示例:

  

ŠisirseptītaiskāzufotokonkurssLatvijā,turklāt,pēciesūtīto   fotogrāfijuskaitatasirarīlielākaisvisāBaltijā。 SAJA   fotokonkursāpeiedalījās90autori,kuriiesūtījakopumā1106   fotogrāfiju。 Fotokonkursaapbalvošanaslaikātiksnominētilabākie   Latvijaskāzufotogrāfi10dažādāskategorijās:gatavošanās,   ceremonija,emocijas,bērni,portrets,jaunaispāris,detaļas,   svinības,izšķirošaismirklisungaismasspēles。

这就是我从剧本那里得到的:

  

ÐisutseptîtaiskâzufotokonkurssLatvijâturklâtpçciesûtîto   fotogrâfijuskaitatasirarîlielâkaisvisâBaltijâ。 Ðajâ   fotokonkursâpiedalîjâs90autorikuriiesûtîjakopumâ1106   fotogrâfiju。 Fotokonkursapapbalvoðanaslaikâtiksnominçtilabâkie   Latvijaskâzufotogrâfi10daþâdâskategorijâs:gatavoðanâs,   ceremonija,emocijas,bçrni,portrets,jaunaispris,detaïas,   svinîbas,izðíiroðaismirklisungaismasspésles。

当我只做echo 'Some latvian text';时,它运行正常。所以问题在于csv处理程序。 据我所知,我需要使用带有BOM的UTF8 。但是我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

如果我说得对,mb_convert_encoding可能正是你要找的。

mb_convert_encoding($data, "UTF-8", "ISO-8859-15");

不确定ISO代码。 也许这会有所帮助:http://webcheatsheet.com/html/character_sets_list.php

http://php.net/manual/de/function.mb-convert-encoding.php