我的Web应用程序(内置在Yii中)有一个导入功能,它将csv导入我们的数据库。整个函数本身非常复杂,将信息分成多个等等。
然而,我的导入不包括外国字符,尝试转换值但不能导入任何东西,它们只是通过并且“?”或'_'。
以下代码是我的控制器的一部分,用于处理导入操作。
值得注意的是,我的网络应用程序界面允许我复制/粘贴并使用这些字符创建新记录,因此服务器本身允许它和数据库一样,只是导致失败。
if($csvFile=CUploadedFile::getInstance($model,'file')) {
$temp = $csvFile->getTempName();
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo,$temp);
$row = 1;
$import = [];
$model->hasHeaders = $_POST['Import']['hasHeaders'];
$accepted_file_types = ['text/csv','text/plain','application/vnd.ms-excel'];
if(in_array($type,$accepted_file_types)) {
if(($handle = fopen($temp, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
$array = [];
for ($c=0; $c < $num; $c++) {
$item = mb_convert_encoding($data[$c], "ISO-8859-1","UTF-8");
array_push($array, $item);
}
// each line of the CSV becomes an array, each field separated by a comma
// push the array representing the line to a new array called $import
array_push($import, $array);
}
fclose($handle);
}
if($model->hasHeaders) { // slice off first line of array, containing the headers
array_shift($import);
}
在for循环中,我尝试使用mb_convert_encoding,iconv,utf8-encode来转换值 - 或者没有任何效果,或者它使它们空白而不是识别字符。
更多背景我试图导入的测试字符串是'BühnelSvarončík'
任何人都能看到我错过的东西吗?
由于