1

データベースから読み取り、データをjson形式で返すAPIで遊んでいます。

phpMyAdminでは文は完璧です(私はutf8_generalを使用してcsvを入力しました)。例:

    A line that uses 'r and special chars etc

しかし、jsonをエコーすると、次のようになります。

    A line that uses ///\\/\/\/r and special chars etc

最初にnullオブジェクトを取り戻したので、次を使用しました。

   mysql_set_charset('utf8', $link);

しかし、私はまだ破損したデータを取り戻します。

アップデート:

いくつかの詳細:

mysql_set_charset('utf8',$link);

/* grab the posts from the db */
$query = "SELECT * FROM huren WHERE 1";

$result = mysql_query($query,$link) or die('Errant query:  '.$query);

// check row count 
$amount = mysql_num_rows($result);

/* create one master array of the records */
$houses = array();
if(mysql_num_rows($result)) {
    while($post = mysql_fetch_assoc($result)) {
        $houses[] = $post;
    }
}

/* output in necessary format */

    header('Content-type: application/json');
 $changed_json= str_replace('\\/', '/',json_encode(array('House'=>$houses)));
echo str_replace('\\\\', '\\',$changed_json);
4

2 に答える 2

3

交換操作とは何ですか?json_encode指定した正確な入力を表す完全に有効なJSONを返すかNULL、データがUTF-8にないなどの問題があったために返されます。json_encode!によって返される文字列には何もしないでください。取得しなかった場合はNULL、勝ったので、エコーする必要があります。

これで動作します:

header('Content-type: application/json');
echo json_encode(array('House'=>$houses));

json_encodeデフォルトでは純粋なASCII出力を生成するため、文字セットは実際には重要ではありません。これは、デフォルトでは、Unicode文字がUnicodeエスケープシーケンスで表されるためです。\uxxxx

于 2012-12-16T19:21:55.107 に答える
0

もう少し先に進んでください。文字列をエンコードする部分を教えてください。

これはそれ自体で機能するように見えるので、他の場所からの複雑な相互作用が必要です。

<?php // RAY_temp_foo.php
error_reporting(E_ALL);
echo '<pre>';

$str = <<<END
A line that uses 'r and special chars etc
END;

$jso = json_encode($str);
$new = json_decode($jso);

// THESE SHOULD MATCH
var_dump($str);
var_dump($new);

echo PHP_EOL;
var_dump($jso);
于 2012-12-16T18:29:20.777 に答える