大家好。
这是网易云音乐的搜索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\n; $request .= host: . $url_info[host] . \n; $request .= referer: $referrer\n; $request .= content-type: application/x-www-form-urlencoded\n; $request .= content-length: . strlen($data_string) . \n; $request .= connection: close\n; $request .= cookie: . appver=1.5.0.75771;\n; $request .= \n; $request .= $data_string . \n; $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;}
回复内容: 大家好。
这是网易云音乐的搜索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\n; $request .= host: . $url_info[host] . \n; $request .= referer: $referrer\n; $request .= content-type: application/x-www-form-urlencoded\n; $request .= content-length: . strlen($data_string) . \n; $request .= connection: close\n; $request .= cookie: . appver=1.5.0.75771;\n; $request .= \n; $request .= $data_string . \n; $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_r(json_decode(music_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进行转码,再是真正的请求。你可以试试