5

MySQl データ型が bit(1) の場合、php で印刷するjson_encodeと Unicode で書き込みますか? IIS は正常に動作しています
が、私の専用サーバーでは Apache ホスティングがユニコードになります。なぜ? ここに画像の説明を入力

Mysql のデータ型はビットですがLocatingLocating\u0001? と出力されています。なぜ?

get-googlemarker.phpこれは、この結果を取得するための私のコーディング GET メソッドです

<?php
mysql_connect("localhost", "root", "123456") or die("Could not connect");
mysql_select_db("db_gps") or die("Could not select database");

$parent_id = $_GET['mainid'];

$query = "SELECT        *
FROM          tbl_locate AS a
INNER JOIN     
(
    SELECT    MainID, Max(DateTime) AS DateTime
    FROM      tbl_locate
    GROUP BY  MainID
) AS b
ON            a.MainID = b.MainID
AND           a.DateTime = b.DateTime
LEFT JOIN     
(
    SELECT b.PicData
     , b.PicUploadedDateTime
     , b.MainID
  FROM (SELECT    MainID,Max(PicUploadedDateTime) as PicUploadedDateTime
        FROM      tbl_picture
        group by MainID
       ) l
  JOIN tbl_picture b
    ON b.MainID = l.MainID AND b.PicUploadedDateTime = l.PicUploadedDateTime
) AS c
ON            a.MainID = c.MainID";

$rs = mysql_query($query);

$arr = array();
while($obj = mysql_fetch_object($rs)) {
 $arr[] = $obj;
}

echo json_encode($arr);


?>

更新しました

表現データは正しいですが、問題は、以下の javascript を使用して Locating 値を読み取ることができない場合です。レコードを試しましalertたが、空白です 。で何も表示できませんtype:stringtype:bittype:bytestype:int
alert

Ext.define('GoogleMarkerModel', {
        extend: 'Ext.data.Model',
        fields: [
        {name: 'ID',    type: 'int'},
        {name: 'Locating',    type: 'int'},
        {name: 'MainPower',    type: 'int'},
        {name: 'Acc',    type: 'int'},
        {name: 'PowerOff',    type: 'int'},
        {name: 'Alarm',    type: 'int'},
        {name: 'Speed',    type: 'int'},
        {name: 'Direction',    type: 'int'},
        {name: 'Latitude',    type: 'float'},
        {name: 'Longitude',    type: 'float'},
        {name: 'DateTime',    type: 'datetime'},
        {name: 'MainID',    type: 'int'},
        {name: 'IOState',    type: 'int'},
        {name: 'OilState',    type: 'int'},
        {name: 'PicUploadedDateTime',    type: 'datetime'},
        {name: 'PicData',    type: 'str'}
        ]
    });
4

2 に答える 2

1

変数の表示はまだ正しいです。

JSON_UNESCAPED_UNICODEPHP 5.4 以降、このオプションを で使用できますjson_encode()http://php.net/manual/en/function.json-encode.phpを参照してください

私の推測では、IIS はデフォルトでエスケープされていない値を返していると思います。

Javascriptでは、通常、parseInt(\u0001)または何かを使用します。extjsなのでわかりません。

次の手段:

A) データベース列をビットから整数に変更します。

B) データベースの値を php にキャストする

while($obj = mysql_fetch_object($rs)) {
  $obj->Locating = (int)$obj-Locating;
  // or try with (string) if (int) fails
  $arr[] = $obj;
}

C) 単純str_replaceに json 出力で:

$json = json_encode($arr);
$json = str_replace('"\u0001"', '"1"', $json);
$json = str_replace('"\u0000"', '"0"', $json);
于 2013-08-01T20:37:11.090 に答える