Преобразование символов latin1 в таблице UTF8 в UTF8

Только сегодня я понял, что мне не хватает этого в моих сценариях PHP:

mysql_set_charset('utf8');

Все мои таблицы - InnoDB, сопоставление «utf8_unicode_ci», и все мои столбцы VARCHAR также являются «utf8_unicode_ci».У меня есть mb_internal_encoding ('UTF-8'); в моих сценариях PHP, и все мои файлы PHP закодированы как UTF-8.

Итак, до сих пор, каждый раз, когда я "ВСТАВЛЯЮ" что-то с диакритическими знаками, например:

mysql_query('INSERT INTO `table` SET `name`="Jáuò Iñe"');

Содержимое 'name' в этом случае будет: Jáuò Ià ± e .

Поскольку я исправил кодировку между PHP и MySQL, новые INSERT теперь сохраняются правильно. Однако я хочу исправить все старые строки, которые в настоящий момент "испорчены". Я уже много чего пробовал, но всегда рвёт строки на первом «недопустимом» символе. Вот мой текущий код:

$m = mysql_real_escape_string('¿<?php echo "¬<b>\'PHP &aacute; (á)ţăriîş </b>"; ?> ă-ţi abcdd;//;ñç´พดแทฝใจคçăâξβψδπλξξςαยนñ ;');
mysql_set_charset('utf8');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('latin1');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('utf8');

$result = mysql_iquery('SELECT * FROM `table`');
while ($row = mysql_fetch_assoc($result)) {
    $message = $row['name'];
    $message = mb_convert_encoding($message, 'ISO-8859-15', 'UTF-8');
    //$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message);
    mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"');
}

Это «ОБНОВЛЕНИЕ» с ожидаемыми символами, за исключением того, что строка обрезается после символа «ă». Я имею в виду, что этот символ и следующие за ним символы не включены в строку.

Кроме того, тестирование с помощью «iconv ()» (которое комментируется в коде) делает то же самое, даже с // IGNORE и // TRANSLIT

Я также тестировал несколько кодировок, между ISO-8859-1 и ISO-8859-15.

43
задан Lightness Races with Monica 6 November 2019 в 12:02
поделиться

1 ответ

Я настоятельно рекомендую использование 'utf8mb4' вместо 'utf8', так как utf8 не может сохранить некоторые китайские символы и эмодзи.

-1
ответ дан 26 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: