Проблема с символами 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);
  */


 ?>
Author: Mariano, 2016-07-05

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

 11
Author: Webserveis, 2016-07-05 20:59:28

Привет дорогой попробуйте добавить эту строку в файл подключения:

mysqli_set_charset($connect,"utf8");

Вам просто нужно добавить это, и он уже будет отображаться правильно, вам больше не нужно помещать в head каждого файла, только в файл подключения.

 4
Author: Christopher Tavara, 2016-07-05 21:10:29

Я тоже столкнулся с той же проблемой, и решение было объединение двух ответов, которые вы получили. Делая это:

   //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);

});

Надеюсь, что это поможет вам

 3
Author: NatxosS, 2017-05-01 16:03:52

Привет очень просто только с этим.

Utf8_encode (), предназначенный для кодирования строк в формате UTF-8. Это очень полезно при работе с REST api или xml

"titulo"=> utf8_encode($consulta[nombre])

Приветствия

 3
Author: Andres Henao, 2019-07-31 05:51:03

Вы можете исправить это с помощью этой функции:

function utf8_converter($array){
      array_walk_recursive($array, function(&$item){
          $item = utf8_encode( $item ); 
      });
      return json_encode( $array );
}
 2
Author: Jdreatiga, 2018-02-06 15:29:55

Это мой первый вклад :) здесь я оставляю свое решение.

<?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);
 ?>

Я НАДЕЮСЬ СЛУЖИТЬ ВАМ

 1
Author: JOCARSOFT, 2017-08-03 02:33:22

В моем случае я использую 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

});
 1
Author: erprom, 2018-03-05 16:05:16

Мне служило только место:

mysqli_set_charset($db, "utf8"); en mi conexion.

Если я прочитаю возвращенный текст JSON, не преобразуя его в объект JavaScript, он показывает символы JES\u00daS в противном случае это не так.

 -1
Author: jesus hernandez, 2017-06-29 16:23:06