preg_match不允许使用空格搜索

时间:2018-08-01 12:52:53

标签: php json preg-match

已四处寻找解决问题的方法。我的搜索是从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;
   }
   }
   ?>

1 个答案:

答案 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;