0

I have data stored in mysql database, the data is encoded in ascii because of some special characters, i am trying to fetch data for iphone application, the json format is correct but due to special characters it returned me null 42756666616c6f205068696c6c79e28099732077696e67732c20636865657365737465616b7320616e64206d6f7265 this is stored in mysql実際にはバッファローフィリーの翼、チーズステーキなど ですが、html_entity_decode、html2textで試しましたが、何も助けてくれませんでした。これについて助けてください。

これは、dbからデータを取得してjson形式で出力するコードです。

$sql = "SELECT  p.product_id,p.image,p.model,d.name,d.product_id,d.language_id  FROM product AS p ,product_description AS d

        WHERE 
        d.product_id = p.product_id
        AND
        d.language_id = 1

        ORDER BY p.date_added


        limit 10
    ";

$rs = mysql_query($sql);
$data = array();
$products = '{"products":{';
$num = mysql_num_rows($rs);

while($d = mysql_fetch_array($rs)){
$image = new SimpleImage();
$image->load($path.$d['image']);
$image->resize(55,55);
$img = strtotime("now").$count;
$image->save("images/".$img.'.jpg');
$pimage = "$img_url/$img.jpg";

$name = html_entity_decode($d['name'],ENT_QUOTES, 'UTF-8');


$highlight = html_entity_decode($d['model'],ENT_QUOTES, 'UTF-8');


if($count < $num){
    $products .= '"'.$d["product_id"].'":[
                                            {
                                                "id":"'.$d["product_id"].'",
                                                "name":"'.$name.'",
                                                "image_url":"'.$pimage.'",
                                                "highlight":"'.$highlight.'"
                                            }
                                        ],';
    }else{
    $products .= '"'.$d["product_id"].'":[
                                            {
                                                "id":"'.$d["product_id"].'",
                                                "name":"'.$d["name"].'",
                                                "image_url":"'.$pimage.'",
                                                "highlight":"'.$highlight.'"
                                            }
                                        ]';
}

}
$products .='}}';

print($products);

Object-c コードは次のとおりです。

NSData *data = [NSData dataWithContentsOfURL:soURL];
    NSError *error;
    productsRaw = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    products = [productsRaw objectForKey:@"products"];
    productKeys = [products allKeys];
4

1 に答える 1

0

その文字列は16進数でエンコードされているようです。以下のようにpack関数を使用できます。

pack('H*', $data);

このSOページで説明されているように、またはそれに近いもの('h*'パッキングパラメーターが機能する場合があります)。

結果の文字列はロケールエンコードされることに注意してください。そのため、元のアプリケーションで使用されたロケールによっては、適切にエンコードされた文字列を取得するためにロケール変換を行う必要がある場合があります。そのためには、iconv関数を使用することをお勧めしますが、いずれにせよ、最初に使用されたロケールを知っておく必要があります。

于 2012-12-18T12:35:15.070 に答える