2017-04-05 22 views
1

enter image description here從PHP導入CSV(mysql)顯示字符如'???'

當我從CSV導入時,它顯示出像我這樣的字符?

我的DB和表格已位於設置爲UTF-8 Unicode的CI和阿拉伯語和其他數據顯示正常,當我做選擇*

但是,當我從CSV導入和使用下面的代碼。它返回我上傳成功,但數據顯示爲?在員工姓名

請在下面找到

導入CSV從代碼...

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<?php 
    header('Content-Type: text/html; charset=utf-8'); 
    mb_internal_encoding('UTF-8'); 
    mb_http_output('UTF-8'); 
?> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<html> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<head> 
    <style type="text/css"> 
    body 
    { 
     margin: 0; 
     padding: 0; 
     background-color:#D6F5F5; 
     text-align:center; 
    } 
    .top-bar 
     { 
      width: 100%; 
      height: auto; 
      text-align: center; 
      background-color:#FFF; 
      border-bottom: 1px solid #000; 
      margin-bottom: 20px; 
     } 
    .inside-top-bar 
     { 
      margin-top: 5px; 
      margin-bottom: 5px; 
     } 
    .link 
     { 
      font-size: 18px; 
      text-decoration: none; 
      background-color: #000; 
      color: #FFF; 
      padding: 5px; 
     } 
    .link:hover 
     { 
      background-color: #9688B2; 
     } 
    </style> 

    <script> 
     (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
     m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
     })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

     ga('create', 'UA-60962033-1', 'auto'); 
     ga('send', 'pageview'); 

    </script> 
</head> 

<body> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <div class="top-bar"> 
     <div class="inside-top-bar"> 
      <a href="" width="500px"></a> 
      <br><br> 
      <a href="../insert.php" class="link">&larr; Back to main Website</a> 
     </div> 

    </div> 
    <h1> CSV Should be in Below Format:</h1><b>Full Name:&nbsp;Employee Number:&nbsp;Department:&nbsp;Email:</b> 
    <div style="border:1px dashed #333333; width:300px; margin:0 auto; padding:10px;"> 

    <form name="import" method="post" enctype="multipart/form-data"> 
     <input type="file" name="file" /><br /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
<?php 
    include ("connect.php"); 

    if(isset($_POST["submit"])) 
    { 
     $file = $_FILES['file']['tmp_name']; 
     $handle = fopen($file, "r"); 
     $c = 0; 
     setlocale(LC_ALL, 'ar_AE.utf8'); 
     while(($filesop = fgetcsv($handle, 1000, ",")) !== false) 
     { 
      $name = $filesop[0]; 
      $emp_number = $filesop[1]; 
      $department = $filesop[2]; 
      $email = $filesop[3]; 
      //$name = $filesop[0]; 
      //$email = $filesop[1]; 
      mysqli_query($link,"SET character_set_client=utf8"); 
      $sql = $link->query("INSERT INTO employees (first_name, emp_number,department,email) VALUES ('$name','$emp_number','$department','$email')"); 
      $c = $c + 1; 
     } 

      if($sql){ 
       echo "You database has imported successfully. You have inserted ". $c ." Records"; 
       echo '<td><a href="../view.php">&larr; View Inserted Records</a></td>'; 
      }else{ 
       echo "Sorry! There is some problem."; 
      } 

    } 
?> 

    </div> 
    <hr style="margin-top:300px;" />  

    <div align="center" style="font-size:18px;"><b><a href="">&copy; ALL RIGHTS RESERVED BY DIBBA MUNICIPALITY FUJAIRAH</a></b></div> 

</body> 
</html> 

我測試的數據如下 محمودعبدالعزيز

1 ABC DEF 凡阿拉伯語一個是全名/ first_name,1是員工編號,abc是department,def是電子郵件

+0

http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – mkaatman

+0

@mkaatman我已經讀它,親愛的...他們都設置爲UTF-8 ... –

+0

發佈包含問題數據的CSV小樣本。 – mkaatman

回答

1

你能否檢查一下你的列的排序規則是否也是UTF8 unicode?

您可以運行mysql> show full columns from employees;

並檢查輸出,以確保即使在列的排序是能夠接受UTF8。除非UTF-8字節順序標記(BOM)被設置

EDIT CSV不能存儲UTF-8的數據。

我不知道您保存的CSV是否保留了UTF-8字符。也許你應該試着在noteapd中打開CSV文件,看看你是否正確地獲得了角色。

EDIT2 我剛剛修改了代碼,讓它正確讀取CSV並且窗體有一個新的接受屬性。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<?php 
    ini_set('display_errors', 'On'); 
    error_reporting(-1); 
    header('Content-Type: text/html; charset=utf-8'); 
    mb_internal_encoding('UTF-8'); 
    mb_http_output('UTF-8'); 
?> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<html> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<head> 
    <style type="text/css"> 
    body 
    { 
     margin: 0; 
     padding: 0; 
     background-color:#D6F5F5; 
     text-align:center; 
    } 
    .top-bar 
     { 
      width: 100%; 
      height: auto; 
      text-align: center; 
      background-color:#FFF; 
      border-bottom: 1px solid #000; 
      margin-bottom: 20px; 
     } 
    .inside-top-bar 
     { 
      margin-top: 5px; 
      margin-bottom: 5px; 
     } 
    .link 
     { 
      font-size: 18px; 
      text-decoration: none; 
      background-color: #000; 
      color: #FFF; 
      padding: 5px; 
     } 
    .link:hover 
     { 
      background-color: #9688B2; 
     } 
    </style> 


</head> 

<body> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <div class="top-bar"> 
     <div class="inside-top-bar"> 
      <a href="" width="500px"></a> 
      <br><br> 
      <a href="#" class="link">&larr; Back to main Website</a> 
     </div> 

    </div> 
    <h1> CSV Should be in Below Format:</h1><b>Full Name:&nbsp;Employee Number:&nbsp;Department:&nbsp;Email:</b> 
    <div style="border:1px dashed #333333; width:300px; margin:0 auto; padding:10px;"> 

    <form name="import" method="post" enctype="multipart/form-data" accept-charset="UTF-8"> 
     <input type="file" name="file" /><br /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
<?php 
    $link = mysqli_connect('dbhost', 'dbuser', 'dbpass', 'test_arabic'); 

    if (!$link) { 
     echo "Error: Unable to connect to MySQL." . PHP_EOL; 
     echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; 
     echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; 
     exit; 
    } 

    if(isset($_POST["submit"])) 
    { 
     $file = $_FILES['file']['tmp_name']; 
     $handle = fopen($file, "r"); 
     $c = 0; 
     setlocale(LC_ALL, 'ar_AE.utf8'); 
     while(($filesop = fgetcsv($handle, 1000, ";")) !== false) 
     { 

      $name = $emp_number = $department = $email = ''; 
      $filesop2 = explode(',', $filesop[0]); 
      $name = $filesop2['0']; 
      $emp_number = $filesop2['1']; 
      $department = $filesop2['2']; 
      $email = $filesop2['3']; 

      mysqli_query($link, "SET NAMES utf8"); 
      mysqli_query($link, "set characer set utf8"); 


      $sql = $link->query("INSERT INTO employees (first_name, emp_number,department,email) VALUES ('".$name."','".$emp_number."','".$department."','".$email."')"); 
      $c = $c + 1; 
     } 

      if($sql){ 
       echo "You database has imported successfully. You have inserted ". $c ." Records"; 
       echo '<td><a href="../view.php">&larr; View Inserted Records</a></td>'; 
      }else{ 
       echo "Sorry! There is some problem. <br>".$link->error; 
      } 

    } 
?> 

    </div> 
    <hr style="margin-top:300px;" />  

    <div align="center" style="font-size:18px;"><b><a href="">&copy; ALL RIGHTS RESERVED BY DIBBA MUNICIPALITY FUJAIRAH</a></b></div> 

</body> 
</html> 
+0

是的...它顯示我對所有的utf8_unicode_ci ... –

+0

@UAE ADVERTISER:不知道這是否會有所幫助,但爲了回答您的來自其他帖子的請求,我測試了[HERE]的代碼(https://pastebin.com/hqYCh1pC)。我創建的數據庫表爲'utf8_unicode_ci',csv已創建並保存爲'utf8 unicode'w/o BOM(可以與OpenOffice/Excel /記事本一起讀取),結果可以 - >打開+讀取CSV以及插入+獲取+顯示是可以的。我已經在這裏和那裏讀到了很多關於這個問題的帖子,而且當我卡住時,我只能說:請再次檢查所有設置(DB和CSV),併爲*真正的PHP大師禱告:) – OldPadawan

+0

@UAEADVERTISER如果你從mysql命令行選擇這個特定的問題數據,它顯示正確嗎?我們至少可以確定數據是否進入數據庫或者只是顯示不正確。 – mkaatman