0

私はmysqlクエリをjsonに変換するこのコードを持っています:

$sth = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 20') or die(mysql_error());
$rows = array();
while($r = mysql_fetch_array($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

うまく機能しますが、データベースに url フィールドがあります。サンプルの json 行は次のとおりです。

{"0":"4","id":"4","1":"Noter 2","name":"Noter 2","2":null,"desc":null,"3":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","iconurl":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","4":"1262032317","date":"1262032317","5":"dBelement, LLC","company":"dBelement, LLC","6":"http:\/\/dbelement.com\/","companyurl":"http:\/\/dbelement.com\/","7":"http:\/\/noter2.dbelement.com","appurl":"http:\/\/noter2.dbelement.com"},

どうすればこれを回避できますか?

4

2 に答える 2

1

「問題」は、URL にバックスラッシュが存在することだと思いますか?

お気に入り :

http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg

まあ、それは Javascript の問題ではありません: JSON データを Javascript オブジェクトに割り当てて、それらの URL の 1 つを表示してみてください:

var data = {"0":"4","id":"4","1":"Noter 2","name":"Noter 2","2":null,"desc":null,"3":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","iconurl":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","4":"1262032317","date":"1262032317","5":"dBelement, LLC","company":"dBelement, LLC","6":"http:\/\/dbelement.com\/","companyurl":"http:\/\/dbelement.com\/","7":"http:\/\/noter2.dbelement.com","appurl":"http:\/\/noter2.dbelement.com"};
alert(data[3]);

URL は正しく表示されます。

http://images.apple.com/webapps/productivity/images/noter2_20091223182720-thumb.jpg

したがって、バックスラッシュは「問題」ではありません;-)


実際、 json.org の "string" セクションを見ると、文字列を有効にするには、スラッシュをバックスラッシュで囲む必要があることがわかります。

于 2009-12-28T22:37:21.397 に答える
0

ここに問題はありません。URL が次のようになっている理由が気になる場合は、次のようにします。

http:\/\/www.example.com\/

このような代わりに:

http://www.example.com/

/文字が適切にエスケープされているためです。JSON オブジェクトを JavaScript でシリアル化解除すると、URL はデータベース内と同じように表示されます。

于 2009-12-28T22:38:33.473 に答える