Чтение ANSI-файла и преобразование в строку UTF-8 - PullRequest
5 голосов
/ 04 января 2011

Есть ли способ сделать это с помощью PHP?

Вставляемые данные выглядят нормально, когда я их распечатываю.

Но когда я вставляю их в базу данных, поле становится пустым.

Ответы [ 3 ]

10 голосов
/ 04 января 2011
$tmp = iconv('YOUR CURRENT CHARSET', 'UTF-8', $string);

или

$tmp = utf8_encode($string);

Странно, но в итоге вы получите пустую строку в вашей БД.Я могу понять, что в вашей БД у вас будет какая-то одежда, но вообще ничего (пустая строка) не странно.

Я просто набрал это в своей консоли:

iconv -l | grep -i ansi

Это показалоme:

ANSI_X3.4-1968
ANSI_X3.4-1986
ANSI_X3.4
ANSI_X3.110-1983
ANSI_X3.110
MS-ANSI

Это возможные значения для ВАШ ТЕКУЩИЙ ДИАГРАММА Как указывалось ранее, когда ваша входная строка содержит символы, разрешенные в UTF, вам не нужно ничего преобразовывать.

Измените UTF-8 в UTF-8 // TRANSLIT, если вы не хотите опускать символы, но заменяете их похожими (когда их нет в наборе UTF-8)

7 голосов
/ 04 января 2011

"ANSI" на самом деле не кодировка.Это короткий способ сказать, «какая кодировка используется по умолчанию в компьютере, который создает данные».Итак, у вас есть двойное задание:

  1. Узнайте, что используют данные кодировки.
  2. Используйте соответствующую функцию для преобразования в UTF-8.

Для # 2, я обычно доволен iconv(), но utf8_encode() также может выполнить эту работу, если исходные данные используют ISO-8859-1.

Обновление

Это выглядиткак будто вы не знаете, какую кодировку используют ваши данные.В некоторых случаях вы можете выяснить это, если знаете страну и язык пользователя (например, испанский / испанский) с помощью кодировки по умолчанию, используемой Microsoft Windows на такой территории.

2 голосов
/ 04 декабря 2013

Будьте осторожны, использование iconv() может вернуть false, если преобразование завершится неудачно.

У меня также есть схожая проблема, некоторые символы из китайского алфавита ошибочно принимаются за \n, если файл закодирован в UNICODE, но не в UFT-8.Чтобы вернуться к вашей проблеме, убедитесь, что кодировка вашего файла совпадает с кодировкой вашей базы данных.Кроме того, использование utf-8_encode() в тексте уже utf-8 может иметь неприятные результаты.Попробуйте использовать mb_detect_encoding(), чтобы увидеть кодировку файла, но, к сожалению, этот способ не всегда работает.Нельзя легко исправить кодировку символов из того, что я вижу: (

...