Многие строки в CSV в порядке, но иногда встречаются записи с каким-то серьезным моджибаке. Вот как такая строка появляется в CSV-файле (перед вставками MySQL и т. д.)
Код: Выделить всё
Krog StreetÃ?Æ?Ã?â??Ã?â? ââ?¬â?¢Ã?Æ?Ã?¢Ã?¢ââ?¬Å¡Ã?¬Ã?â?¦Ã?¡Ã?Æ?Ã?â??Ã?¢ââ??¬Ã?¡Ã?Æ?ââ?¬Å¡Ã?â??Ã? NE ( Krog Street market)
Код: Выделить всё
public static function isMojibake(string $string): bool
{
return preg_match('/Ã.|â.|Â./', $string) === 1;
}
Код: Выделить всё
sample.csv: text/csv; charset=us-ascii
Код: Выделить всё
private function fixMojibake(array &$line): void
{
// Loop through each value in the line
foreach ($line as $key => $value) {
// If the value is a string and contains mojibake characters, convert it back to Windows-1252 and then to UTF-8
if (is_string($value) && Str::isMojibake($value)) {
// Convert the value back to Windows-1252 and then to UTF-8
$line[$key] = mb_convert_encoding($value, 'UTF-8', 'Windows-1252');
}
}
}
Ни одно из попыток перекодирования, которые я пытаюсь использовать, похоже, не работает. Он также не может быть проанализирован никакими онлайн-декодерами моджибаке; например https://mytexttool.com/mojibake.html
Я заметил, что приведенный выше декодер делает изменение строки на следующее:
Код: Выделить всё
Krog Streetí?Ə?í?â??í?â? ââ?¬â?¢í?Ə?í?¢í?¢ââ?¬Å¡í?¬í?â?¦í?¡í?Ə?í?â??í?¢ââ??¬í?¡í?Ə?ââ?¬Å¡í?â??í? NE ( Krog Street market)
Подробнее здесь: https://stackoverflow.com/questions/798 ... -using-php
Мобильная версия