Как получить json_encode() для работы с ISO-8859-1 (åäö)

json_encode() не будет работать для меня, когда я буду использовать åäö. Зачем? И как я могу заставить его работать?

php:

echo json_encode($arr);

javascript:

var theResponse = JSON.parse(xmlHttp.responseText);

Когда я alert() ответ, а ответ содержит å, ä или ö, ответ = NULL

Пожалуйста, помогите мне...

Ответ 1

Как сказал Грег, мне пришлось кодировать åäö до UTF-8. Но я не использовал iconv или mbstring. Когда я utf8_encode() все значения перед тем, как поместить значения в array, проблема была решена.

Ответ 2

Он говорит в json_encode() документации:

Эта функция работает только с кодированными данными UTF-8.

Вы должны преобразовать его в utf-8 с iconv или mbstring.

Ответ 3

Эта функция выдаст правильный тип данных для вывода JSON и utf8_encode строки.

    /* Change data-type from string to integar or float if required.
     * If string detected then utf8_encode() it. */
    function cast_data_types ($value) {
      if (is_array($value)) {
        $value = array_map('cast_data_types',$value);
        return $value;
      }
      if (is_numeric($value)) {
        if(strpos('.', $value)===false) return (float)$value;
        return (int) $value;
      }
      return utf8_encode((string)$value);
    }

json_encode (cast_data_types($data));

Ответ 4

JSON определяет строки как Unicode!

Определение JSON

Вы должны кодировать ISO-код UTF-8

Ответ 5

Старый вопрос, но предположил, что я поставил бы это здесь, если кому-то понадобится регистрировать данные с помощью json_encode, но сохраните данные нетронутыми, неповрежденными для проверки позже.

Вы можете закодировать исходные данные с помощью base64_encode, тогда он будет работать с json_encode. Позже после запуска json_decode вы можете декодировать строку с помощью base64_decode, вы получите исходные данные без изменений.

Ответ 6

Использование стандартного метода при чтении из MySQL:

$resultArray = array();
while($obj = MySQL_fetch_object($res)) {
 $resultArray[] = $obj;
}
$result = json_encode($resultArray);

Кодирование можно выполнить, используя следующее:

$resultArray = array();
while($obj = MySQL_fetch_object($res)) {
 foreach($obj as $key => $value) {
  if (!is_null($value)) {
   $obj->$key = utf8_encode($value);
  }
 }
 $resultArray[] = $obj;
}
$result = json_encode($resultArray);

if is_null должен быть включен так, чтобы нулевые поля (например, поля DateTime) оставались пустыми на выходе.

Ответ 7

$data (в моем случае) - массив с текстовыми значениями ISO-8859-1. Трюк ниже подготавливает $data для использования с json_encode.

function toUtf8(&$v, $k) {
    $v = utf8_encode($v);
}
array_walk_recursive($data, 'toUtf8');

Ответ 8

Начиная с PHP 5.4.0:

Преобразуйте строки в массиве в utf-8 с помощью функции utf8_encode($str).

Затем json_encode с опцией JSON_UNESCAPED_UNICODE :

$arr = json_encode($array, JSON_UNESCAPED_UNICODE);