Так что я некоторое время боролся с этим и не смог найти решение.PHP: данные не находятся в одной кодировке
Моя проблема в том, что я генерирую CSV из API, и в нем есть некоторые хорватские знаки. Все прошло хорошо, и я использовал эту функцию для создания CSV файл
function generateCSV($arr, $option) {
if ($option == 'Products') {
$fp = fopen('csv/products.csv', 'w');
foreach ($arr as $key => $value) {
fputcsv($fp, $value, ";");
}
}
}
Проблема возникла, когда я должен был извлечь данные из файла CSV на другом сервере и включить его в уравнение. Я думаю, что кодировка этого файла все испортила.
Мой CSV выглядит как этот н
ссылки | имя | случайные столбцы ..... | описание
Часть описания, которую я включаю в другой CSV-файл с другого сервера. Часть кода, в котором я сохраняю его в файле, находится здесь:
function generateDescriptionCSV(){
$ch = curl_init('http://www.---.hr/---/--/Proizvodi.csv');
$fp = fopen('csv/products_descriptions.csv', 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
Поэтому у меня есть источники данных. Один из них - это предоставленные API вызовы в базу данных, а второй - это файл, который я генерирую с использованием CURL. Когда я склеиваю эти данные вместе, данные из API отображаются нормально, в то время как данные из внешнего CSV выглядят нормально, за исключением хорватских знаков, которые очень важны в этом случае.
Когда я пытаюсь открыть окончательный файл CSV в Excel, используя кодировку UTF-8, я получаю что-то вроде этого.
05-120000 Мозаика ПЛО Č са dodacima, 23x17,5x4,8 с 59.99 64 KREATIVNI SETOVI, ПРИБОР З.А. IZRADU Spol: Ж. установить ZA slaganje Mozaik Slika, установите себе sastoji од ПЛО е za nabadanje 16x21 cm, 192 komada nabadalica raznih boja i oblika, te posudice koja zajedno s plo? om? ini kofer? i? ZA spremanje nabadalica (18x23x4 см)
вопросительные знаки должны отображаться точно так же, как персонаж выше, и что č
Когда я открываю как конечный файл CSV и внешний на в блокноте и затем попробуйте «сохранить как» их, чтобы найти кодировку файлов для первого файла, я получаю UTF-8 и для второго ANSI
Любые предложения?
EDIT
Я попытался назвать вывод кодировку через mb_detect_encoding
и это то, что я придумал
Первая строка данных из источника API и вторая линия является данные из внешнего CSV. Когда я открываю этот внешний CSV с помощью Excel, используя «Исходный текст», «Происхождение файла» проверяется как 1250: Центральноевропейский (Windows), и когда я меняю его на UTF-8, каждый специальный знак представляется в виде этого символа . Когда я пытаюсь открыть файл CSV, созданный окончательно, происхождение файла проверяется как 8592: специальные знаки Центральной Европы (ISO), исходящие из api, отображаются нормально, в то время как знаки, поступающие из этого внешнего CSV, представлены как .
Возможно, что помогает в указании, где проблема лежит
Ну ... как данные закодированы, что вы пишете в CSV? От куда это? – deceze
Не знаете, понимаю ли я ваш вопрос? Первый набор данных - это API, который подключен к локальной базе данных, а второй набор данных - из этого внешнего CSV. Есть ли способ проверить кодировку данных внутри PHP? –
Возможно, начнется с [Работа с интерфейсом Unicode Front To Back в веб-приложении] (http://kunststube.net/frontback/) и/или [Что каждый программист абсолютно уверен, должен знать о кодировках и наборах символов для работы с текстом) (http://kunststube.net/encoding/). – deceze