我有数据存储在mysql数据库中,由于一些特殊字符,数据在ascii中编码,我正在尝试获取iphone应用程序的数据,json格式是正确的但是由于特殊字符它返回给我null 42756666616c6f205068696c6c79e28099732077696e67732c20636865657365737465616b7320616e64206d6f7265 这是存储在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];
答案 0 :(得分:0)
该字符串似乎是十六进制编码的。 您可以使用pack功能,如下所示:
pack('H*', $data);
如this SO page中所述,或与其接近的内容('h*'
打包参数可能有效)。
请注意,生成的字符串将是 locale 编码,因此根据原始应用程序中使用的区域设置,您可能必须进行一些区域设置转换才能获得正确编码的字符串。为此,我建议使用iconv函数,但无论如何你必须知道最初使用的语言环境。