[英]php fgetcsv - charset encoding problems
使用PHP 5.3 fgetcsv
函数,由于编码问题,我遇到了一些问题。 请注意,该文件具有西班牙语“特殊”拉丁字符,如图形重音á,é,íï等...
我得到CSV文件导出我在MS 2008 for Mac Excel文件中的一些结构化数据。
如果我用Mac OS X TextEdit
应用程序打开它,一切似乎都很完美。
但是当我开始使用我的PHP程序并尝试使用该fgetcsv PHP函数读取CSV时,我没有让它正确读取字符集。
/**
* @Route("/cvsLoad", name="_csv_load")
* @Template()
*/
public function cvsLoadAction(){
//setlocale(LC_ALL, 'es_ES.UTF-8');
$reader = new Reader($this->get('kernel')->getRootDir().'/../web/uploads/documents/question_images/2/41/masiva.csv');
$i = 1;
$r = array("hhh" => $reader -> getAll());
return new Response(json_encode($r, 200));
}
如您所见,我也尝试过将setlocale
用于es_ES.UTF-8
。 但没有什么能让它起作用。
阅读部分来到这里:
public function getRow()
{
if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
$this->_line++;
return $this->_headers ? array_combine($this->_headers, $row) : $row;
} else {
return false;
}
}
看看每行读取后我在$ row变量中得到的内容:
那些?
字符应该是带有图形重音的元音。
那边有什么线索吗? 如果我使用MS Excel for Windows,它会工作吗? 如何在运行时知道文件的确切编码并在读取之前设置它?
(对于那些西班牙语的人来说,不要在这些文本中对这些可怕的医学内容感到恐惧;))。
尝试这个:
function convert( $str ) {
return iconv( "Windows-1252", "UTF-8", $str );
}
public function getRow()
{
if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
$row = array_map( "convert", $row );
$this->_line++;
return $this->_headers ? array_combine($this->_headers, $row) : $row;
} else {
return false;
}
}
这可能与excel在保存时对文件进行编码的方式有关。
尝试将.xls文件上传到Google文档并下载为.csv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.