2016-06-15 2 views
0

Так что я некоторое время боролся с этим и не смог найти решение.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 и это то, что я придумал

http://shorttext.com/7a59c8f1

Первая строка данных из источника API и вторая линия является данные из внешнего CSV. Когда я открываю этот внешний CSV с помощью Excel, используя «Исходный текст», «Происхождение файла» проверяется как 1250: Центральноевропейский (Windows), и когда я меняю его на UTF-8, каждый специальный знак представляется в виде этого символа . Когда я пытаюсь открыть файл CSV, созданный окончательно, происхождение файла проверяется как 8592: специальные знаки Центральной Европы (ISO), исходящие из api, отображаются нормально, в то время как знаки, поступающие из этого внешнего CSV, представлены как .

Возможно, что помогает в указании, где проблема лежит

+0

Ну ... как данные закодированы, что вы пишете в CSV? От куда это? – deceze

+0

Не знаете, понимаю ли я ваш вопрос? Первый набор данных - это API, который подключен к локальной базе данных, а второй набор данных - из этого внешнего CSV. Есть ли способ проверить кодировку данных внутри PHP? –

+0

Возможно, начнется с [Работа с интерфейсом Unicode Front To Back в веб-приложении] (http://kunststube.net/frontback/) и/или [Что каждый программист абсолютно уверен, должен знать о кодировках и наборах символов для работы с текстом) (http://kunststube.net/encoding/). – deceze

ответ

0

Я, наконец, решена моя проблема, используя эту функцию iconv('windows-1250','UTF-8', $data[33]); изменить кодировку строк в UTF-8

Смежные вопросы