Import from CSV in PHP (mysql) shows characterses like '???'

前端 未结 1 460
醉酒成梦
醉酒成梦 2021-01-16 10:54

When I am importing from CSV, it is showing me characters like ???

My DB and tables are aleady set to utf8 unicode ci and arabic and other data shows proper

相关标签:
1条回答
  • 2021-01-16 11:04

    Could you please check if your column's collation is also UTF8 unicode?

    You can run mysql> show full columns from employees;

    and check the output to make sure even the column's collation is able to accept UTF8.

    EDIT CSV can't store UTF-8 data unless the UTF-8 Byte Order Mark (BOM) is set.

    I don't know if the CSV you are saving is retaining the UTF-8 characters. Maybe you should try opening the CSV in noteapd and see if you get the characters properly.

    EDIT2 I just modified the code to have it read the CSV properly and the form has a new accept attribute.

    <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 讨论(0)
提交回复
热议问题