Как декодировать этот моджибак CSV с помощью PHP? [дубликат]Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как декодировать этот моджибак CSV с помощью PHP? [дубликат]

Сообщение Anonymous »

Я пытаюсь написать программу импорта, которая обрабатывает сторонний CSV-файл и помещает его в базу данных MySQL.
Многие строки в CSV в порядке, но иногда встречаются записи с каким-то серьезным моджибаке. Вот как такая строка появляется в CSV-файле (перед вставками MySQL и т. д.)

Код: Выделить всё

Krog StreetÃ?Æ?Ã?â??Ã?â? Ã¢â?¬â?¢Ã?Æ?Ã?¢Ã?¢ââ?¬Å¡Ã?¬Ã?â?¦Ã?¡Ã?Æ?Ã?â??Ã?¢ââ??¬Ã?¡Ã?Æ?ââ?¬Å¡Ã?â??Ã?  NE ( Krog Street market)
Я написал статический метод, помогающий обнаружить моджибаке, который, похоже, работает:

Код: Выделить всё

public static function isMojibake(string $string): bool
{
return preg_match('/Ã.|â.|Â./', $string) === 1;
}
Я не могу определить исходную кодировку. Когда я запускаю файл -i sample.csv, я получаю:

Код: Выделить всё

sample.csv: text/csv; charset=us-ascii
Я пробовал принудительно использовать UTF-8 из Windows-1252 и ISO-8859-1, вставив в цикл for следующее (при переборе строк CSV):

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»