json_encode()
åäö を使用しているときは機能しません。なんで?どうすればそれを機能させることができますか?
php
:_
echo json_encode($arr);
javascript
:_
var theResponse = JSON.parse(xmlHttp.responseText);
Ialert()
が応答で、応答に å、ä、または ö が含まれている場合、応答は =NULL
私を助けてください...
json_encode()
åäö を使用しているときは機能しません。なんで?どうすればそれを機能させることができますか?
php
:_
echo json_encode($arr);
javascript
:_
var theResponse = JSON.parse(xmlHttp.responseText);
Ialert()
が応答で、応答に å、ä、または ö が含まれている場合、応答は =NULL
私を助けてください...
json_encode()
ドキュメントには次のように書かれています:
この関数は、UTF-8 でエンコードされたデータでのみ機能します。
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
、変更されていない元のデータが得られます。
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
null フィールド (DateTime フィールドなど) が出力で null のままになるように、 を含める必要があります。
($data
私の場合)は、テキスト値がISO-8859-1の配列です。$data
以下のトリックは、 で使用する準備をしますjson_encode
。
function toUtf8(&$v, $k) {
$v = utf8_encode($v);
}
array_walk_recursive($data, 'toUtf8');