2013-04-12 11 views
12

I)は、(json_encode内部phpのjson_encode関数でdegree '文字'が表示されない場合、これを表示する方法は?

[sit_latitude] => 20° 23.298' N 

ようなPHPの配列を渡します。出力は次のようになります。

{"sit_latitude":null} 

これは解決方法ですか?

... 
$stmt->bindParam("id", $_GET[id]); 
$stmt->execute(); 
$employee = $stmt->fetchObject(); 
$dbh = null; 
echo '{"item":'. json_encode($employee) .'}'; 
+4

を解決する

echo '{"item":'. json_encode($employee) .'}'; 

のように渡し、実際のP​​HPコードとロケールの設定を投稿してください。 – arkascha

+0

あなたのファイルはUTF-8として保存されていないと思います。 –

答えて

10

を試してみて、成功する可能性がありちょっと変わったけど働きましたので、あなたと分かち合いましょう。

$latitude = json_encode(utf8_encode($emplyoee['sit_latitude'])); 
$longitude = json_encode(utf8_encode($employee['sit_longitude'])); 

    $emplyoee['sit_latitude'] = $latitude; 
    $emplyoee['sit_longitude'] = $longitude; 

、今、これはあなたの問題

3

JSON and escaping characters

私のコードスニペット - この記事はあなたを助けるかもしれません。

度を\u00f8Cとし、jsでデコードしてください。

4

json_encodeは、入力の文字列が有効であるとみなします。UTF-8(PHP文字列はUnicodeコードポイントのシーケンスではなく、一連のバイトであることに注意してください)。テキストエディタがそのエンコーディングを使用するように設定されていない場合(二重引用符で囲んだ\xc2\xb0などの16進エスケープコードを使用してUTF-8を手動で生成していない場合)、文字列はnullとしてエンコードされます有効なUTF-8)。

Windows-1252のような他の一般的な文字セットもASCIIのスーパーセットなので、非ASCII文字(U + 00B0 DEGREE SIGNが含まれている)がある場合にのみ問題になります。

文字列が有効なUTF-8であっても、デフォルトでjson_encodeは実際の度合記号の代わりに\u00b0を出力します。これは、PHP json_decodeまたはJavaScript JSON.parseを使用したプログラムによるデコードでは問題にはなりません。これはJSON 16進エスケープシーケンスを理解しています。

(PHP 5.4では、このエスケープを防ぐためのフラグがありますが、多くのWebサーバーにはPHP 5.3以上があり、U + 2028 LINE SEPARATORとU + 2029 PARAGRAPH SEPARATOR 。私が前述したように、あなたはとにかくする必要はありませんが、2行のコードでフラグをシミュレートすることが可能である。)

-4

あなたは、私が試した何はhtmlspecialchars()関数http://php.net/manual/en/function.htmlspecialchars.php

+0

JSONはHTMLではありません。 –

+0

htmlspecialcharsは度合い記号を一切エスケープしないので、役に立たないでしょう。実際、PHP 5.4のインストールでは、(UTF-8が無効であるため)この関数は空の文字列を返すことさえあります。 – PleaseStand

関連する問題