在 PHP 中读取文件时每个字符之间的 UTF-8 替换字符

问题描述 投票:0回答:1

我编写了一些代码来解析制表符分隔的文件并将其导入 MySQL 表中。该文件是 UTF-8,MySQL 表也是如此。

导入有效,但当我查看表中字段中的数据时,所有其他字符都显示为 � 的 UTF-8 替换字符。例如,原始文件中的数字 4308817 在数据库中显示为“4�3�0�8�8�1�7”。 我的数据中确实有一些 UTF-8 字符(如 ë 等),所以这是必需的。

我已经尝试了 utf8_encode、decode、mb_convert_encoding 等各种方法,但似乎没有什么能让这些在没有 � 字符的情况下显示出来。


$lines = file($dir . '/' . $file);
foreach ($lines as $line_num => $line) {
    $arr = explode("\t", $line);
    if($line_num > 0) {                                 
        $idx = 0;
        $AddSQL = "INSERT INTO `$table` VALUES(";                   
        foreach ($arr as $field) {
            $value = $arr[$idx++];
            $AddSQL .= "\"" . str_replace('"', '\"', trim($value)) . "\", ";
        }
        $AddSQL = substr($AddSQL, 0, strlen($AddSQL) - 2);
        $AddSQL .= ")";
        
        $dbconn->query($AddSQL);
    }
}
php sql mysql utf-8
1个回答
0
投票

看起来我刚刚通过偶然发现这个函数找到了解决方案:https://www.php.net/manual/en/uconverter.transcode.php

mb_convert_encoding 对我不起作用,但这确实有效:

$line = UConverter::transcode($line, 'UTF-8', 'UTF-16BE');

© www.soinside.com 2019 - 2024. All rights reserved.