首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_match不允许带空格的搜索

preg_match不允许带空格的搜索
EN

Stack Overflow用户
提问于 2018-08-01 12:52:53
回答 1查看 81关注 0票数 1

四处寻找解决这个问题的方法。我的搜索是从Mu-6 search中获取JSON数据,但是搜索只适用于单个单词,例如搜索‘妈妈’或'mia‘返回的结果,但是搜索'mamma’并不返回结果。API使用的是UTF-8,我的文档被设置为相同的。我试图用preg_match来解决这个问题。有关index.php页面,请参见下面的my:

输入带有空格的搜索查询以返回结果后,我期望的。例如“妈妈咪呀”

实际结果没有搜索结果。只有当用户搜索单个短语“妈妈”或“米亚”时才有效

下面是一个工作页面:http://songfind.co.uk/lyrics-find

代码语言:javascript
复制
<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;
   }
   }
   ?>

EN

回答 1

Stack Overflow用户

发布于 2019-05-20 09:17:23

试试这个;

代码语言:javascript
复制
$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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51633819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档