Подскажите пожалуйста. Пишу программу для андроида, надо связать через JSON БД. Но столкнулся с кодировкой(наверное) Код (Text): $con = mysqli_connect ( HOST, USER, PASS, DB ); mysql_query('SET CHARACTER SET utf8'); $sql = "select * from s_products ORDER BY name LIMIT 1000,100"; $res = mysqli_query ( $con, $sql ); $result = array (); while($row = mysqli_fetch_array($res)){ array_push($result, array('id'=>$row[0], 'name'=>$row[3] )); } $json=json_encode (array ("result" => $result) ); echo $json; mysqli_close ( $con ); Проблема только с кирилицей. Выдает Код (Text): {"result":[{"id":"30489","name":null},{"id":"34705","name":"Babyliss EP technology wet and dry 38mm 2073PE"},{"id":"12031","name":null},{"id":"11987","name":null},{"id":"11988","name":null}, Помогите решить пожалуйста.
почему null не понятно, но я когда конверчу, всегда юзаю JSON_UNESCAPED_UNICODE вторым параметром у функции json_encode
я так делал. не то. сейчас сказали что надо перед array_push var_dump($row); но выдает хз что http://web.curl.com.ua/json2.php Код (Text): while($row = mysqli_fetch_array($res)){ var_dump($row); array_push($result, array('id'=>$row[0], 'name'=>$row[3] )); }
замени на mysqli_fetch_assoc --- Добавлено --- замени на PHP: $result[] = ['id' => (int)$row['id'], 'name' => $row['name']]; --- Добавлено --- php поставь нормальной версии, не ниже 5.4 --- Добавлено --- этого недостаточно дополни этим https://php.ru/manual/mysqli.set-charset.html и переходи на объекты уже.
Код (Text): $mysqli = new mysqli(HOST, USER, PASS, DB); mysqli_query('SET CHARACTER SET utf8'); $sql = "select * from s_products ORDER BY name LIMIT 1000,100"; $res = mysqli_query ( $mysqli, $sql ); $result = array (); while($row = mysqli_fetch_assoc($res)){ $result[] = ['id' => (int)$row['id'], 'name' => $row['name']]; } $json=json_encode (array ("result" => $result), JSON_UNESCAPED_UNICODE ); echo $json; /* изменение набора символов на utf8 */ if (!$mysqli->set_charset("utf8")) { printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); } else { printf("Текущий набор символов: %s\n", $mysqli->character_set_name()); } mysqli_close ( $mysqli ); тоже что и было http://web.curl.com.ua/json2.php
Для Java se, ee это не проблема. А для андроида есть нюансы. И сервер не впс, нельзя яву развернуть. Короче надо скрипт на пхп.
у тебя странный подход к программированию. Ты размещаешь код, устанавливающий кодировку соединения с бд после того, как всё уже сделал. Понимаешь, что не так? по урлу чета ща не пашет вообще.
кодировка ничего не решает в данном случае. в цикле дело Код (Text): while($row = mysqli_fetch_assoc($res)){ $result[] = ['id' => (int)$row['id'], 'name' => $row['name']]; } не пашит потому что PHP 5.6 поставил. mbstring.internal_encoding: выключено было. Сейчас на 5.4 поменял
я уже давно перестал мучиться с этой функцией - нашел и дополнил вот такую PHP: public static function to_json(array $data) { //JSON $isArray = true; $keys = array_keys($data); $prevKey = -1; // Необходимо понять — перед нами список или ассоциативный массив. foreach ($keys as $key) if (!is_numeric($key) || $prevKey + 1 != $key) { $isArray = false; break; } else $prevKey++; unset($keys); $items = array(); foreach ($data as $key => $value) { $item = (!$isArray ? "\"$key\":" : ''); if (is_array($value)) $item .= self::to_json($value); elseif (is_null($value)) $item .= 'null'; elseif (is_bool($value)) $item .= $value ? 'true' : 'false'; elseif (is_string($value)) $item .= '"' . preg_replace( '%([\\x00-\\x1f\\x22\\x5c])%e', 'sprintf("\\\\u%04X", ord("$1"))', $value ) . '"'; elseif (is_numeric($value)) $item .= $value; else throw new Exception('Wrong argument.'); $items[] = $item; } return ($isArray ? '[' : '{') . implode(',', $items) . ($isArray ? ']' : '}'); }