Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中作为csv文件上载时将法语转换为英语_Php - Fatal编程技术网

在php中作为csv文件上载时将法语转换为英语

在php中作为csv文件上载时将法语转换为英语,php,Php,我用这种方法把法语转换成英语。当我从html表单中获取法语字符时,它工作得很好。但我必须上传包含一些法语字符的csv文件。它在上载csv文件时未转换 这是我上传csv时的代码 function UploadQuiz(){ $row =& $this->getTable('quiz'); $fileName='uploadFile'; $fileName=$_FILES['uploadFile']['tmp_name']; $f = fopen($fileNa

我用这种方法把法语转换成英语。当我从html表单中获取法语字符时,它工作得很好。但我必须上传包含一些法语字符的csv文件。它在上载csv文件时未转换

这是我上传csv时的代码

function UploadQuiz(){
   $row =& $this->getTable('quiz');
   $fileName='uploadFile';
   $fileName=$_FILES['uploadFile']['tmp_name'];
   $f = fopen($fileName,"r");

   $success_counter=0; $failure_counter=0;
   while ( ($data = fgetcsv($f, 10000, ",") ) !== FALSE ){
     //perform string escapes so data is entered into database correctly
     $quiz_question = $data[0];
     $option_a = $data[1];
     $option_b = $data[2];
     $option_c = $data[3];
     $option_d = $data[4];
     $option_e = $data[5];
     $quiz_answer = $data[6];
     $quiz_explanation = $data[7];
     $quiz_difficulty = $data[8];
     $chapter_id = $data[9];

     $chapter=$this->check_chapter_id_exist($this->_data['course_id'],$chapter_id);
     if(!$chapter->chapter_id){
       $failure_counter++;
       continue;
     }

     $data['quiz_id'] = '';
     $data['course_id'] = $this->_data['course_id'];
     $data['quiz_question'] = $this->_convertgsm->convertgsm($quiz_question);
     $data['quiz_optionA'] = $this->_convertgsm->convertgsm($option_a);
     $data['quiz_optionB'] = $this->_convertgsm->convertgsm($option_b);
     $data['quiz_optionC'] = $this->_convertgsm->convertgsm($option_c);
     $data['quiz_optionD'] = $this->_convertgsm->convertgsm($option_d);
     $data['quiz_optionE'] = $this->_convertgsm->convertgsm($option_e);

  return $data;
}
下面是我的php文件中的方法:

function convertgsm($data){
    $normalizeChars = array(
    '`'=>"'",'Ë'=>'E','Â'=>'A','À'=>'A','Í'=>'I', 'Ì'=>'I', 'Ã'=>'A', 'Î'=>'I',    'Ä'=>'A','Ç'=>'C','Ò'=>'O','Ï'=>'I','È'=>'E','Ó'=>'O','É'=>'E','Ô'=>'O','Ê'=>'E','Õ'=>'O','Ö'=>'O','ê'=>'e','Ù'=>'U','ë'=>'e','Ú'=>'U','ë'=>'e','Ú'=>'U','î'=>'i','Û'=>'U','Û'=>'U','Ü'=>'U','ô'=>'o','Ý'=>'Y','õ'=>'o','â'=>'a','û'=>'u','ã'=>'a','ÿ'=>'y','ç'=>'c','ï'=>'i'    
    );

    $result_data =  strtr($data, $normalizeChars);
    return $result_data;
  }
上传csv文件时,您能帮我将法语转换成英语吗?

用法1

$translate = new TranslateCSV ();
$str = 'who will win à wôrld cup ?';
var_dump ( $translate->customStrtr ( $str ) );
输出

 string 'who will win a world cup ?' (length=26)
用法2

$translate = new TranslateCSV ();
$translate->process ( "PATH_TO_UPLOADED CSV" );

if (! empty ( $translate->getErrors () )) {
    print_r ( $translate->getErrors () );
} else {
    echo "CSV Transalation Completed";
}
阶级


而上传意味着你希望它在传输时被读取和替换?我只是从我的csv文件中解析上传的数据。然后作为参数传递给该函数。你能添加你用来上传csv的代码吗。。我想我可以帮你添加代码。请检查。哦。。刚刚看到你的更新。。。我会更新我的代码以适应您的使用现在我输入的数据谁将赢得瓦德杯?在我的csv文件中。我只是打印字符串。它告诉我谁会赢� W�rld杯。所以我不能转换。有什么想法吗?我只是在$quick\u question=iconv'UTF-8','ASCII//TRANSLIT',$quick\u question;只打印utf8输出:谁会赢还有其他方法吗?等等。。我找到了一个解决方案嗨..我有一个疑问。如果我有像élephant这样的文本。这些字符我在我的私人数组中没有提到,$chars。它应该是像élephant一样的。但它显示给我�你能帮我吗?我刚才看到了那个链接。这是100%正确。但我需要一个输出,比如谁将赢得世界杯?élephant.Theé应该作为éonly执行。这是我的问题。所以只有我在数组中没有提到。
class TranslateCSV {
    private $chars = array (
            '`' => "'",
            'Ë' => 'E',
            'Â' => 'A',
            'À' => 'A',
            'Í' => 'I',
            'Ì' => 'I',
            'Ã' => 'A',
            'Î' => 'I',
            'Ä' => 'A',
            'Ç' => 'C',
            'Ò' => 'O',
            'Ï' => 'I',
            'È' => 'E',
            'Ó' => 'O',
            'É' => 'E',
            'Ô' => 'O',
            'Ê' => 'E',
            'Õ' => 'O',
            'Ö' => 'O',
            'ê' => 'e',
            'Ù' => 'U',
            'ë' => 'e',
            'Ú' => 'U',
            'ë' => 'e',
            'Ú' => 'U',
            'î' => 'i',
            'Û' => 'U',
            'Û' => 'U',
            'Ü' => 'U',
            'ô' => 'o',
            'Ý' => 'Y',
            'õ' => 'o',
            'â' => 'a',
            'û' => 'u',
            'ã' => 'a',
            'à' => 'a',
            'ÿ' => 'y',
            'ç' => 'c',
            'ï' => 'i' 
    );

    private $output = array ();
    private $errors = array ();
    private $charsKeys = array ();
    private $charsValues = array ();
    function setChars($chars) {
        $this->chars = $chars;
    }

    function getErrors() {
        return $this->errors;
    }

    function customStrtr($str) {

        if (empty ( $this->charsKeys )) {
            $this->charsKeys = array_keys ( $this->chars );
        }

        if (empty ( $this->charsValues )) {
            $this->charsValues = array_values ( $this->chars );
        }

        $str = str_replace ( $this->charsKeys, $this->charsValues, $str );
        $str = iconv ( 'UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $str );
        return $str;
    }

    function process($csvFile, $csvOut = "") {
        if (! is_file ( $csvFile )) {
            $this->errors [] = "CSV  files does not exist";
            return false;
        }

        if (! empty ( $csvOut ) && ! @touch ( $csvOut )) {
            $this->errors [] = "Can't Create Output CSV";
            return false;
        }

        $fpRead = @fopen ( $csvFile, "r" );

        if (! empty ( $csvOut )) {
            $fpWrite = fopen ( $csvOut, 'w' );
        }

        while ( ($data = fgetcsv ( $fpRead, 1000, "," )) !== FALSE ) {
            $num = count ( $data );
            $field = array ();
            for($c = 0; $c < $num; $c ++) {
                $field [] = $this->customStrtr ( $data [$c] );
            }

            if (! empty ( $csvOut )) {
                fputcsv ( $fpWrite, $field );
            }
        }
        fclose ( $fpRead );

        if (! empty ( $csvOut )) {
            fclose ( $fpWrite );
        }
        return true;
    }
}