Проблема с символами N и акцентами, генерирующими JSON
у меня проблемы с акцентами и специальными символами, генерируя json с php в акцентах, например:
T\u00c3\u00a9cnologia = Técnologia
я уже пытался исправить это с помощью mysqli_set_charset($conexion, "utf8");
, но ничего.
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type,x-prototype- version,x-requested-with');
//header("Content-type: application/json; charset=utf-8");
$server = "localhost";
$user = "root";
$pass = "";
$bd = "u703093142_wifi";
//Creamos la conexión
$conexion = mysqli_connect($server, $user, $pass,$bd)
or die("Ha sucedido un error inexperado en la conexion de la base de datos");
//generamos la consulta
$sql = "select upload.*,promociones.nombre_input
from upload
inner join promociones on upload.idGaleria=promociones.imagen_gallery limit 4";
mysqli_set_charset($conexion, "utf8"); //formato de datos utf8
if(!$result = mysqli_query($conexion, $sql)) die();
//$clientes = array(); //creamos un array
/*
while($row = mysqli_fetch_array($result))
{
$titulo=$row['titulo'];
utf8_decode($nombre_input=$row['nombre_input']);
$data[] = array('nombre_input'=> $nombre_input,'titulo'=> $titulo);
}
*/
while($row = mysqli_fetch_assoc($result)){
$data[]=array_map('utf8_encode', $row);
}
$close = mysqli_close($conexion)
or die("Ha sucedido un error inexperado en la desconexion de la base de datos");
//Creamos el JSON
$json_string = json_encode($data);
//echo $json_string;
echo '{"datos":'.$json_string."}";
//Si queremos crear un archivo json, sería de esta forma:
/*
$file = 'clientes.json';
file_put_contents($file, $json_string);
*/
?>
8 answers
Я не очень хорошо понимаю проблему у вас есть, если вы не хотите, чтобы специальные символы преобразуются в формат \u....
Получатель должен отменить кодировку, обычно он делает это автоматически, например, в php
используя json_decode(data_json)
преобразует его Просто.
Но все же вы хотите, чтобы они не конвертировались, используйте опцию JSON_UNESCAPED_UNICODE
Тест
$response = "Técnologia";
echo json_encode($response); //T\u00e9cnologia
echo json_encode($response, JSON_UNESCAPED_UNICODE); //Técnologia
Официальная документация PHP json_decode
Привет дорогой попробуйте добавить эту строку в файл подключения:
mysqli_set_charset($connect,"utf8");
Вам просто нужно добавить это, и он уже будет отображаться правильно, вам больше не нужно помещать в head каждого файла, только в файл подключения.
Я тоже столкнулся с той же проблемой, и решение было объединение двух ответов, которые вы получили. Делая это:
//preparamos la conexión a la base de datos $db = new mysqli("localhost", "root", "root", "miDataBase"); // esto es necesario a la hora de recuperar datos en utf 8 mysqli_set_charset($db, "utf8");$app->get("/tabla", function(Request $request, Response $response) use ($db) {
$sql = "SELECT * FROM tabla;"; $query = $db->query($sql); $respuesta = array(); while($fila = $query->fetch_assoc()) { $respuesta[] = $fila; } return json_encode($respuesta, JSON_UNESCAPED_UNICODE);
});
Надеюсь, что это поможет вам
Привет очень просто только с этим.
Utf8_encode (), предназначенный для кодирования строк в формате UTF-8. Это очень полезно при работе с REST api или xml
"titulo"=> utf8_encode($consulta[nombre])
Приветствия
Вы можете исправить это с помощью этой функции:
function utf8_converter($array){
array_walk_recursive($array, function(&$item){
$item = utf8_encode( $item );
});
return json_encode( $array );
}
Это мой первый вклад :) здесь я оставляю свое решение.
<?php
//Importing Database Script
require_once('dbConnect.php');
mysqli_set_charset($con,"utf8"); // AQUI AGREGUE UTF-8
$sql = "Select * from acompanante";
//getting result $r = mysqli_query($con,$sql);
$r = mysqli_query($con,$sql);
//creating a blank array
$result = array();
$row_cnt = mysqli_num_rows($r); //obtenemos el numero de resultados de busqueda
//looping through all the records fetched
while($row = mysqli_fetch_array($r)){
//Pushing name and id in the blank array created
array_push($result,array(
"id"=>$row['id'],
"nombre"=>$row['nombre'],
"apellido"=>$row['apellido'],
"telefono"=>$row['telefono'],
"dni"=>$row['dni'],
"idred"=>$row['idred'],
"usuario"=>$row['usuario'],
"clave"=>$row['clave'],
"estado"=>$row['estado']
));
}
//Displaying the array in json format
echo json_encode(array('result'=>$result, JSON_UNESCAPED_UNICODE)); // AQUI AGREGUE JSON_UNESCAPED_UNICODE
mysqli_close($con);
?>
Я НАДЕЮСЬ СЛУЖИТЬ ВАМ
В моем случае я использую composer с slim, это было исправлено, поставив
mysqli_set_charset($bd,"utf8");
Перед выполнением запроса.
Пример запроса get будет выглядеть следующим образом:
// Listar productos
$app->get('/productos', function() use($app,$bd){
mysqli_set_charset($bd,"utf8"); //poniendolo antes de la petición
$sql = 'SELECT * FROM productos;';
$query = $bd->query($sql);
$productos = array();
while ($producto = $query->fetch_assoc()) {
$productos[]=$producto;
}
$result = array(
'status' => 'success',
'code' =>200,
'data' =>$productos
);
echo json_encode($result, JSON_UNESCAPED_UNICODE); //tambien ha servido esta opción
});
Мне служило только место:
mysqli_set_charset($db, "utf8"); en mi conexion.
Если я прочитаю возвращенный текст JSON, не преобразуя его в объект JavaScript, он показывает символы JES\u00daS
в противном случае это не так.