Ответ 1
Как сказал Грег, мне пришлось кодировать åäö до UTF-8
. Но я не использовал iconv или mbstring. Когда я utf8_encode()
все значения перед тем, как поместить значения в array
, проблема была решена.
json_encode()
не будет работать для меня, когда я буду использовать åäö. Зачем? И как я могу заставить его работать?
php
:
echo json_encode($arr);
javascript
:
var theResponse = JSON.parse(xmlHttp.responseText);
Когда я alert()
ответ, а ответ содержит å, ä или ö, ответ = NULL
Пожалуйста, помогите мне...
Как сказал Грег, мне пришлось кодировать åäö до UTF-8
. Но я не использовал iconv или mbstring. Когда я utf8_encode()
все значения перед тем, как поместить значения в array
, проблема была решена.
Он говорит в json_encode()
документации:
Эта функция работает только с кодированными данными UTF-8.
Эта функция выдаст правильный тип данных для вывода 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));
JSON определяет строки как Unicode!
Вы должны кодировать ISO-код UTF-8
Старый вопрос, но предположил, что я поставил бы это здесь, если кому-то понадобится регистрировать данные с помощью json_encode, но сохраните данные нетронутыми, неповрежденными для проверки позже.
Вы можете закодировать исходные данные с помощью base64_encode
, тогда он будет работать с json_encode
. Позже после запуска json_decode
вы можете декодировать строку с помощью base64_decode
, вы получите исходные данные без изменений.
Использование стандартного метода при чтении из 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) оставались пустыми на выходе.
$data
(в моем случае) - массив с текстовыми значениями ISO-8859-1. Трюк ниже подготавливает $data
для использования с json_encode
.
function toUtf8(&$v, $k) {
$v = utf8_encode($v);
}
array_walk_recursive($data, 'toUtf8');
Начиная с PHP 5.4.0:
Преобразуйте строки в массиве в utf-8
с помощью функции utf8_encode($str)
.
Затем json_encode
с опцией JSON_UNESCAPED_UNICODE :
$arr = json_encode($array, JSON_UNESCAPED_UNICODE);