如何让 json_encode() 与 ISO-8859-1 配合使用 (åäö)

问题描述 投票:0回答:8
当我使用 åäö 时,

json_encode()
对我不起作用。为什么?我怎样才能让它发挥作用?

php

echo json_encode($arr);

javascript

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

当我

alert()
响应,且响应包含 å、ä 或 ö 时,响应为 =
NULL

请帮帮我...

php json iso-8859-1
8个回答
12
投票

它在

json_encode()
文档中说:

此函数仅适用于 UTF-8 编码的数据。

您应该先使用

iconvmbstring 将其转换为 utf-8。


8
投票
正如 Greg 提到的,我必须将 åäö 编码为

UTF-8

。但我没有使用 iconv 或 mbstring。当我在将值放入 
utf8_encode()
 之前 
array
 所有值时,问题就解决了。


7
投票
此函数将为 JSON 输出转换正确的数据类型并对字符串进行 utf8 编码。

/** * 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 mb_convert_encoding((string)$value, 'UTF-8', 'ISO-8859-1'); } json_encode (cast_data_types($data));
    

2
投票
JSON 将字符串定义为 Unicode!

JSON 定义

您必须将 ISO 编码为 UTF-8


2
投票
老问题,但我想我会把它放在这里,以防有人需要使用 json_encode 记录数据,但保持数据不变,完好无损以供稍后检查。

您可以使用

base64_encode

 对原始数据进行编码,然后它将与 
json_encode
 一起使用。稍后运行 
json_decode
 后,您可以使用 
base64_decode
 解码字符串,您将获得未修改的原始数据。 


1
投票
自 PHP 5.4.0 起:

使用

utf-8

 函数将数组中的字符串转换为 
utf8_encode($str)

然后

json_encode

JSON_UNESCAPED_UNICODE 选项:

$arr = json_encode($array, JSON_UNESCAPED_UNICODE);


    


0
投票
从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

,以便空字段(例如日期时间字段)在输出中保持为空。


0
投票

$data

(在我的例子中)是一个文本值为
ISO-8859-1的数组。下面的技巧准备 $data
json_encode
 一起使用。

function toUtf8(&$v, $k) { $v = utf8_encode($v); } array_walk_recursive($data, 'toUtf8');
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.