Похоже на этот нерешенный вопрос
Мой вывод PHP требует JSON_NUMERIC_CHECK
включен, однако есть одна строка Ник столбец в моей базе данных, который должен быть возвращен в виде строки. Значения в этом столбце могут содержать числа без ограничения длины. Пример кода:
$response["players"] = array();
...
$stmt = $connection->prepare('SELECT id, nick FROM players WHERE NOT id = ? ORDER BY nick');
$stmt->bind_param('i', $_POST["id"]);
$stmt->execute();
$result = $stmt->bind_result($id, $nick);
while ($stmt->fetch()) {
$players = array();
$players["id"] = $id;
$players["nick"] = $nick;
array_push($response["players"], $players);
}
...
echo json_encode($response, JSON_NUMERIC_CHECK);
Например, ник «007» возвращается как «7» и мне нужно, чтобы он был оригинальным «007». Удаление «JSON_NUMERIC_CHECK» помогает, но это ошибки остальной части кода. Strval () Используемая функция, как указано ниже, не помогла.
$result = $stmt->bind_result($id, strval($nick));
$players["nick"] = strval($nick);
В PHP, к сожалению, нет явного типа для переменных, это делает вашу проблему не такой простой для решения.
Я пришел с 2 решением.
1) если вам нравится ООП, сделайте Serializable, Arrayable
класс для использования в качестве контейнера для вашей строки с методом, возвращающим правильное закодированное значение.
2) первое кодирование с использованием JSON_NUMERIC_CHECK
чтобы убедиться, что ваши данные соответствуют вашим ожиданиям, затем декодируйте проверенные данные, вручную установите строку в ее первоначальное значение, затем снова закодируйте, но на этот раз не используя JSON_NUMERIC_CHECK
,
$str = $response['nick'];
$response = json_decode(json_encode( $response, JSON_NUMERIC_CHECK ) );
$response->nick = $str;
$response = json_encode( $response );
Других решений пока нет …