已四处寻找解决问题的方法。我的搜索是从musixmatch api获取JSON数据,但是搜索仅适用于单个单词,例如搜索'mamma'或'mia'返回结果,但搜索'mamma mia'则不返回结果。该API使用的是UTF-8,并且我的文档设置为相同。我试图用preg_match解决这个问题。请参阅下面的index.php页面上的我的php:
我期望的结果 输入搜索查询后,带空格以返回结果。例如“妈妈咪呀”
实际结果 没有搜索结果。仅在用户搜索单个短语“妈妈”或“米娅”时有效
这是一个工作页:http://songfind.co.uk/lyrics-find
<form id"lyricsform" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="GET">
<input type="text" id="lyricinputtype" name="q"/>
<span class="error">* <?php echo $nameErr;?></span>
<select name="songtype" id="lyricstype">
<option name="song" value="song">Song Title</option>
<option name="artist" value="artist">Artist</option>
</select>
<input type="submit" value="Search" />
</form>
<?php
$query = $_GET['term'];
$apikey = 'MYAPIKEY';
$apicall = 'http://api.musixmatch.com/ws/1.1/track.search?q_track='.$query.'&apikey='.$apikey;
$url = file_get_contents($apicall);
$json = json_decode($url);
$nameErr = "";
$query = "";
if ($_SERVER["REQUEST_METHOD"] == "GET") {
if (empty($_GET["q"])) {
$nameErr = "Song Title or Artist is Required";
} else {
$query = test_input($_GET["q"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$query)) {
$nameErr = "Only letters and white space allowed";
}
}
echo 'You are searching for the Song: ' .$query;
foreach($json->message->body->track_list as $track_list) {
echo '<div style="float: left; width: 100%; display: block;">';
echo '<p style="float:left; margin-right:10px;"><img src="'.$track_list->track->album_coverart_100x100.'"></p>';
echo '<h2> Track Title: '.$track_list->track->track_name.'</h2>';
echo '<p> Artist Name: '.$track_list->track->artist_name.'</p>';
$track_id = $track_list->track->track_id;
//URL gets passed to lyrics.php to display the data on separate page
echo '<a href="lyrics.php/track.lyrics.get?track_id='.$track_list->track->track_id.'">View Lyrics</a>';
echo '</div>';
}
function test_input($data) {
$data = htmlspecialchars($data);
return $data;
}
}
?>
答案 0 :(得分:0)
尝试一下;
$query = $_GET['term'];
$queryEncoded = urlencode($query); <-- I encoded search term.
$apikey = 'MYAPIKEY';
$apicall = 'http://api.musixmatch.com/ws/1.1/track.search?q_track='.$queryEncoded.'&apikey='.$apikey;