PHP下调用网易云音乐搜索API结果不正确

大家好。

这是网易云音乐的搜索API。

当调用下面一段function,$word是英文时搜索结果正常,但中文的时候返回结果不正确。

为什么呢,请指教?

function music_search$word, $type=1
{ $url = "http://music.163.com/api/search/pc"; $post_data = array s => $word, offset => 0, limit => 20, type => $type, ; $referrer = "http://music.163.com/"; $URL_Info = parse_url$url; $values = []; $result = ; $request = ; foreach $post_data as $key => $value { $values[] = "$key=" . urlencode$value; } $data_string = implode"&", $values; if !isset$URL_Info["port"] { $URL_Info["port"] = 80; } $request .= "POST " . $URL_Info["path"] . " HTTP/1.1
"; $request .= "Host: " . $URL_Info["host"] . "
"; $request .= "Referer: $referrer
"; $request .= "Content-type: application/x-www-form-urlencoded
"; $request .= "Content-length: " . strlen$data_string . "
"; $request .= "Connection: close
"; $request .= "Cookie: " . "appver=1.5.0.75771;
"; $request .= "
"; $request .= $data_string . "
"; $fp = fsockopen$URL_Info["host"], $URL_Info["port"]; fputs$fp, $request; $i = 1; while !feof$fp { if $i >= 15 { $result .= fgets$fp; } else { fgets$fp; $i++; } } fclose$fp; return $result;
}

是不是你用的编码不一样

不正确是什么意思?我测试了下没问题

phpprint_rjson_decodemusic_search十年,1;
Array [result] => Array [songCount] => 300 [songs] => Array [0] => Array [starred] => [popularity] => 100 [starredNum] => 0 [playedNum] => 0 [dayPlays] => 0 [hearTime] => 0 [mp3Url] => http://m1.music.126.net/V6G5ER-inEZ_Oufxq9tmfA==/1153387697546241.mp3 [rtUrls] => Array [name] => 十年 [id] => 66842 [position] => 4 [duration] => 206000 [status] => 1 [alias] => Array [commentThreadId] => R_SO_4_66842 [copyFrom] => [album] => Array [songs] => Array [name] => 黑白灰 [id] => 6548 [type] => 专辑 [size] => 10 [status] => 1 [description] => [tags] => [alias] => Array [company] => 英皇娱乐 [artist] => Array [img1v1Id] => 0 [name] => [id] => 0 

估计人家的接口不能接受原生的中文字符的编码。建议在post传入的参数当中,利用urlencode进行转码,再是真正的请求。你可以试试

发表评论

电子邮件地址不会被公开。 必填项已用*标注