Импорт из CSV в PHP (mysql) показывает символы типа «???»

введите описание изображения здесь

Когда я импортирую из CSV, он показывает мне персонажи вроде ???

Моя БД и таблицы настроены на utf8 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 Где арабское имя – полное имя / имя_пользователя, 1 номер сотрудника, abc – отдел, а def – электронная почта

Не могли бы вы проверить, является ли сортировка столбца также юникодом UTF8?

Вы можете запустить mysql> show full columns from employees;

и проверьте вывод, чтобы убедиться, что даже сопоставление столбцов может принимать UTF8.

EDIT CSV не может хранить данные UTF-8, если не установлен флажок (BOM) байта UTF-8.

Я не знаю, сохраняет ли CSV символы UTF-8. Возможно, вам стоит попробовать открыть CSV в noteapd и посмотреть, правильно ли вы получите символы.

EDIT2 Я только что изменил код, чтобы он правильно прочитал CSV, и в форме появился новый атрибут accept.

 <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> по <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>