2012-04-14 72 views
0

我正在使用此方法将法语转换为英语。当我从我的html表单中获得法语字符时,它的效果很好。但我必须上传包含法文字符的csv文件。它在上传csv文件时没有转换。在php中上传为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文件转换成英文?

+0

“,而上传“意味着您希望在传输过程中对其进行读取和替换? – 2012-04-14 08:00:40

+0

我只是解析从我的csv文件上传的数据。然后作为参数传递给该函数。 – ram 2012-04-14 08:14:59

+0

你可以添加你使用的代码来上传你的CSV ....我想我可以帮助 – Baba 2012-04-14 08:51:03

回答

1

用法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"; 
} 

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; 
    } 
} 
+0

我输入了数据“谁会赢得wôrld杯?”在我的csv文件中。我只是打印字符串。它告诉我“谁会赢得杯子?”。所以我不能转换。任何想法? – ram 2012-04-14 12:25:42

+0

添加了更好的方法 – Baba 2012-04-14 12:42:49

+0

请耐心等待...让我学习代码.. – Baba 2012-04-14 12:50:42