Знак вопроса (�) в json файле, у первого элемента при конвертировании из csv в json PHP
Всем привет.
Есть файл index.php , в котором реализована форма с загрузкой csv файла на сервер, далее этот файл считывается и формируется json.
При получении первой строки из csv файла и формирования ее в заголовок (массив), каждому первому элементу (name) добавляется знак вопроса � в json файле. То есть вывод выглядит следующим образом.
{
"promotions": {
"main": [
{
"�name": "Мороженое"
Соответственно данный знак вопроса мешает для дальнейшей работы, необходимо его убрать. Прошу подсказать как решить данную проблему.
index.php
<form action="./script/saveFile.php" method="post" enctype="multipart/form-data">
<label> Select Files: </label>
<input type="file" name="fileUpload[]" multiple>
<input type="submit" name="Submit" value="Upload">
</form>
<?php
header('Content-type: text/html; charset=utf-8');
setlocale(LC_ALL, 'ru_RU.UTF-8');
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_http_input('UTF-8');
mb_http_output('UTF-8');
mb_language('uni');
// создаем шаблон для json
$jsonObj = '{"promotions": {}}';
$jsonObj2 = trim(str_replace('\\', '', json_encode($jsonObj, JSON_UNESCAPED_UNICODE)), '"');
$jsonObj3 = json_decode($jsonObj2, true); // декодируем json в массив
?>
<?php
$fileCsv = file("./promotions/convert.csv", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // файл который будем читать
$fileJson = 'promotions.json'; // файл в который будем записывать json
$headersFile = array_shift($fileCsv); // получаем первую строку с заголовками
$headersFile = str_getcsv($headersFile, ';'); // деламем массив из первой строки
foreach ($fileCsv as $line) {
// добавляем значения в массив
$jsonObj3["promotions"]["main"][] = array_combine( $headersFile, str_getcsv($line, ';'));
}
echo trim(str_replace('\\', '', json_encode($jsonObj3, JSON_UNESCAPED_UNICODE)), '"'); // выводим на экран json
$writeJson = trim(str_replace('\\', '', json_encode($jsonObj3, JSON_UNESCAPED_UNICODE)), '"'); // записываем в переменную и удаляем лишнием символы - ковычки в начале и в конце и обратные слэши
// $bom = pack('H*', 'EFBBBF');
// $str = preg_replace("/^$bom/", '', $writeJson);
file_put_contents($fileJson, $writeJson); // записываем в файл
?>
saveFile.php - скрипт для загрузки файлов
<?php
// Set Upload Path
$target_dir = '../promotions/';
if( isset($_FILES['fileUpload']['name'])) {
$total_files = count($_FILES['fileUpload']['name']);
for($key = 0; $key < $total_files; $key++) {
// check extension for upload file
$checkEsxtension = strtolower(pathinfo($_FILES['fileUpload']['name'][$key], PATHINFO_EXTENSION));
if (in_array($checkEsxtension, array('jpg', 'jpeg', 'png', 'json', 'csv'))) {
// Check if file is selected
if(isset($_FILES['fileUpload']['name'][$key]) && $_FILES['fileUpload']['size'][$key] > 0) {
$original_filename = $_FILES['fileUpload']['name'][$key];
$target = $target_dir . basename($original_filename);
$tmp = $_FILES['fileUpload']['tmp_name'][$key];
move_uploaded_file($tmp, $target);
header("Location: ../index.php"); // redirect to index
} else {
echo 'Ошибка! Загрузки, пожалуйста попробуйте еще раз.';
}
} else {
echo 'Ошибка! Выберите файлы с разрешением: jpg, jpeg, png, csv';
}
}
}
Файл csv
Результат json файла
P.S.
Я пробовал определять кодировку utf-8, удалять bom, но ничего не помогло. Заметил, что файл csv определяется в vsCode в формате utf-8 with BOM, если csv файл сохранить в vsCode просто как utf-8 то данный символ сразу же пропадает