我正在读取一个用 UTF-8 编码的 csv,其中包含一些特殊字符,例如 ò
.我使用 htmlentity 将 UTF-8 字符存储到它们的 HTML 等效项。但是这些特殊字符在 MYSQL 数据库中存储为带有问号的菱形。
我的代码是:-
$fileName = $_FILES['csv_file']['tmp_name'];
ini_set('auto_detect_line_endings', 1);
$fp = fopen($fileName, 'r');
$resource = Mage::getSingleton('core/resource');
$writeAdapter = $resource->getConnection('core_write');
$optionsNumber = 4;
$line = true;
while ($line !== false){
$names = array();
$namesIndex = 0;
while (($line = fgetcsv($fp, self::MAX_LINE, ',', '"')) !== false) {
$empty_row = false;
for ($i = 0; $i < $optionsNumber+1; $i++) {
$line[$i] = trim($line[$i], "rnt' ".'"');
$line[$i] = htmlentities($line[$i], ENT_SUBSTITUTE, "UTF-8");
$sql2 = "insert ignore into `custom_table` ". "(parent_id, options_id, value, p_id) values ". "(:parent_id, :options_id, :value,:p_id)";
$binds = array(
'parent_id' => 0,
'options_id' => 1,
'value' => $line[$i],
'p_id' => 1,
);
$writeAdapter->query($sql2,$binds);
}
}
}
现在的问题是Motò 6.5
值存储为Mot� 6.5
有人请指出错误是什么。提前谢谢。
请使用以下行
$line[$i] = utf8_encode($line[$i]);
而不是
$line[$i] = htmlentities($line[$i], ENT_SUBSTITUTE, "UTF-8");
它可以有许多起源。 例如,由 PHP 文件的编码导致的问题。 为避免此类问题,您可以遵循以下规则:
- 将所有 PHP 文件编码为 UTF8 而无需 BOM
- 使数据库/表/字段使用字符集 UTF8 和排序规则
utf8_general_ci
- 连接到MySQL数据库后立即执行以下查询:
"SET NAMES UTF8;"
- 让 PHP 在 UTF8 中加载所有数据
您永远不会有任何编码问题,不再;)