Я использую пакет League / CSV Laravel для чтения и манипулирования CSV-файлом и сохранения этих CSV-данных в базе данных, но я сталкиваюсь с некоторыми проблемами только для некоторых строк, в которых есть некоторые специальные символы, такие как «45,6 ºF», при чтении данных из CSV.
Я много искал об этой проблеме и обнаружил, что мы должны использовать «UTF-8» или «utf8mb4» в сопоставлении базы данных и сохранить этот CSV в «utf8», но он работает только для всех тех, ктоспециальные символы, которые находятся на клавиатуре.
Я хочу использовать все типы специальных символов, таких как "45.6 ºF", которые также не находятся на клавиатуре.
В настоящее время мой код читает столбец CSVданные и преобразовать его в двоичные данные ' b"column value" '
Он добавляет "b"
со строкой и преобразует эту строку в двоичное значение только для тех строк, которые имеют какие-либо специальные символы.
Я потратил много времени, но могне найти лучшего решения этой проблемы.Поэтому, пожалуйста, помогите мне, я буду очень благодарен вам.
$reader = Reader::createFromPath(public_path().'/question.csv', 'r');
$reader->setHeaderOffset(0);
$records = $reader->getRecords();
foreach ($records as $offset => $record) {
$qs = Question::first();
$qs->question = $record['Question'];
$qs->save();
}
Это дает мне этот результат после чтения из CSV с "b".
array:2 [▼
"ID" => "1"
"Question" => b"Fahrenheit to Celsius (ºF to ºC) conversion calculator for temperature conversions with additional tables and formulas"
]
, но это должно бытьв строковом формате без двоичного файла "b".
Если я скопирую эту строку со специальными символами и назначу ее статической переменной, то она будет работать нормально и сохранит данные в базе данных, подобной этой
$a="Fahrenheit to Celsius (ºF to ºC) conversion calculator for temperature conversions with additional tables and formulas";
$qs = Question::first();
$qs->question = $a;
$qs->save();
После долгой борьбы я нашел решение этой проблемы.Я просто добавил эту строку в код, чтобы преобразовать ее в utf8_encode перед сохранением в базе данных.
$r = array_map("utf8_encode", $record);
Не просто скопируйте и вставьте текст из Google для сохранения в базе данных, потому что скопируйте и вставьтетекст и специальные символы не работают большую часть времени.
Спасибо.