json_encode()
当我使用 åäö 时不会为我工作。为什么?我怎样才能让它工作?
php
: _
echo json_encode($arr);
javascript
: _
var theResponse = JSON.parse(xmlHttp.responseText);
当我alert()
响应时,响应包含 å、ä 或 ö,响应为 =NULL
请帮帮我...
json_encode()
当我使用 åäö 时不会为我工作。为什么?我怎样才能让它工作?
php
: _
echo json_encode($arr);
javascript
: _
var theResponse = JSON.parse(xmlHttp.responseText);
当我alert()
响应时,响应包含 å、ä 或 ö,响应为 =NULL
请帮帮我...
正如 Greg 提到的,我必须将 åäö 编码为UTF-8
. 但我没有使用 iconv 或 mbstring。当我utf8_encode()
把所有的值都放到之前,array
问题就解决了。
此函数将为 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_encode 记录数据但保持数据不变,以便以后检查。
您可以使用 对原始数据进行编码base64_encode
,然后使用json_encode
. 稍后运行后json_decode
,您可以使用 解码字符串base64_decode
,您将获得未修改的原始数据。
自 PHP 5.4.0 起:
将数组中的字符串转换为utf-8
使用utf8_encode($str)
函数。
然后json_encode
使用JSON_UNESCAPED_UNICODE选项:
$arr = json_encode($array, JSON_UNESCAPED_UNICODE);
从 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
以便空字段(例如,日期时间字段)在输出中保持为空。
(在我的例子中)是一个文本值为ISO-8859-1$data
的数组。下面的技巧准备与.$data
json_encode
function toUtf8(&$v, $k) {
$v = utf8_encode($v);
}
array_walk_recursive($data, 'toUtf8');