2012-08-15 38 views
2

我有大约50个问题和70,000个条目进行了大量研究,因此手动编辑或使用数据透视表不会真正起作用,我需要将数据上传到数据库中。在使用fgcsv()时,我无法使用任何精度读取日文字符。我已经尝试将区域设置设置为UTF-8和SJIS,但似乎都不想阅读所有的日文字符。我读的地方,这可能是一个错误,但我不知道..如何让FGETCSV读取整个日本单元格

的数据是这样的:

Q-004 必須回答 あなたは、以下のどちらにお住まいですか? S/A 
1  北海道 Hokkaido 
2  青森県 Aomori 
3  岩手県 Iwate 
4  宮城県 Miyagi 
5  秋田県 Akita 

这里是我的代码:

setlocale(LC_ALL, 'ja_JP.SJIS'); 
     $fp = fopen($_POST["filename"],'r') or die("can't open file"); 
      $csv_line = fgetcsv($fp,1024); 
      $query = ""; 
      $count = 0; 
      $question = false; 
      while($csv_line = fgetcsv($fp,1024)) { 

       if (!$question && strpos($csv_line[0],"Q-")!== false) 
       { 
        echo "Found a question: ".$csv_line[2] . "<br>"; 
        $question = true; 
       } 
       else if($question && strlen($csv_line[0])==0) 
       { 
        echo "<hr>"; 
        $question = false; 
       } 
       else if($question && intval($csv_line[0])>0) 
       { 
        echo $csv_line[0]. " has value ". $csv_line[2]." - ".$csv_line[3]. "<br>"; 
       }  

       $count++; 
      } 
     echo "$count records read successfully"; 
     fclose($fp) or die("can't close file"); 

下面是结果:

Found a question: A以下のどちらにお住まいですか? 
1 has value k海道 - Hokkaido 
2 has value X県 - Aomori 
3 has value - Iwate 
4 has value {城県 - Miyagi 
5 has value H田県 - Akita 

回答

1

当谈到在PHP中读取CSV时,我会说......不要这样做,而是使用SQL数据库来代替,其中您可以使用ca n在MySQL中设置排序规则,如ujis_japanese_ci

您应该能够使用phpMyAdmin轻松地将您的CSV导入到MySQL数据库中,如果这是您所拥有的,然后从MySQL数据库呈现数据而不是读取CSV文件。

这是一种解决方法,但我的一般经验是CSV +外国/特殊字符==问题。

我相信这至少是值得的尝试。祝你好运

+0

我想导入它使用phpMyAdmin,但正如我所说,我有50个问题要导入,他们在一张工作簿,并不是所有的数组是相同的“形状”。在这个例子中,我使用了一个单一的答案,但我有一些问题是多答案的,有些是矩阵,我正在计划在读取CSV时实施这些问题。我想我可以扔掉所有的日本人,导入它,然后用日语 - >英语翻译创建一个新表格。 – Asitaka 2012-08-15 02:38:47

+0

无论如何,是的,我会采用SQL方法并抛弃CSV。现在将数据制成表格以便将来进行更改并更轻松地处理数据库可能很有意义。 – khaverim 2012-08-15 03:19:33

+0

我稍后再尝试一下,并告诉你它是如何工作的。只是为了澄清,数据已经列表,我只是想找到一个简单的方法来存储数据的关键。起初我只是想将数值作为数组进行硬编码,所以当我通过php从数据库中获取数据时,数据量非常小,我不必每次都传输“静态”数据。 – Asitaka 2012-08-15 03:57:48

相关问题