json возвращает null с помощью специальных символов


Сегодня я наткнулся на эту ошибку:

При попытке кодирования массива в json, некоторые значения возвращаются null. Я приехал решение, прежде чем использовать функцию json_encode() пройти через все строки в UTF-8 с помощью , htmlentities($string, UTF-8) однако в специальных случаях, string обладал этого знака – (заметьте, что это отличается от дефиса -), и мне возвращается ошибка. посмотрите на тесты, которые я сделал:

 $string    = htmlentities('Av. 7 de setembro – Salvador', UTF-8); // String com o caracter que retorna erro
 $string2   = htmlentities('Av. 7 de setembro - Salvador', UTF-8); // String com o Hífen
 $array = array('string' => $string, 'string2' => $string2);
 echo json_encode($array);

 Output: {"string":null,"string2":"Av. 7 de setembro - Salvador"}

Существует другой способ конвертировать это символ? Боюсь, что есть и другие символы, что htmlentities() не решает.

Author: Diego Henrique, 2014-06-13

4 answers

Используйте константу ENT_QUOTES для преобразования кавычек:

 $string    = htmlentities('Av. 7 de setembro – Salvador', ENT_QUOTES, "UTF-8"); // String com o caracter que retorna erro
 $string2   = htmlentities('Av. 7 de setembro - Salvador', ENT_QUOTES, "UTF-8"); // String com o Hífen
 $array = array('string' => $string, 'string2' => $string2);
 echo json_encode($array);

Например

 6
Author: abfurlan, 2014-06-13 15:40:16

Я хотел бы использовать прямо в json_encode. Но если возникли проблемы со специальными символами, вы можете попробовать использовать функции: utf8_encode или utf8_decode вместо htmlentities

 1
Author: José Neto, 2014-06-14 19:41:39

Извлеките htmlentities и сразу используйте json_encode:

<?php    
  header ('Content-type: text/html; charset=UTF-8');
  $string    = 'Av. 7 de setembro – Salvador'; // String com o caracter que retorna erro
  $string2   = 'Av. 7 de setembro - Salvador'; // String com o Hífen
  $array = array('string' => $string, 'string2' => $string2);
  echo json_encode($array);

Выход:

{"string":"Av. 7 de setembro \u2013 Salvador","string2":"Av. 7 de setembro - Salvador"}

\u2013: Unicode Character 'EN DASH' (U+2013)

Например: ideone

 0
Author: , 2014-06-13 16:13:36

Когда я получил этот тип проблемы, я использую функцию "mb_convert_encoding"

  mb_convert_encoding($string, 'UTF-8', 'LATIN1');

См. руководство функции в http://php.net/manual/en/function.mb-convert-encoding.php

 0
Author: dsandrade, 2016-03-27 23:03:21