从URL中选择hashtag到数据库

时间:2014-07-12 21:25:27

标签: php html mysql sql hashtag

所以我有一个数据库,我存储了I love #catsI like pie等随机帖子。所以我实现了一个搜索功能。这是我用来查询的内容

SELECT * FROM posts WHERE post_content LIKE '%$search%' 

现在这样做是为了获得搜索结果。这就是我得到$search

的方式
$search = htmlspecialchars($_GET['search_query'], ENT_QUOTES, 'UTF-8');

现在说我尝试搜索#cats我会得到一个结果。但我不会得到一个返回的哈希标签。

我会得到这个

<a href="/search/s.php?search_query=%23cats">cats</a>

仅显示cats,而不显示主题标签。这让我相信数据库没有检索到哈希标记。有任何想法吗?

这就是我得到结果的方式

$stmt = $con->prepare("SELECT * FROM posts WHERE post_content LIKE '%$search%'");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);

2 个答案:

答案 0 :(得分:1)

您获得%23cats的原因是因为网址编码。 %23 =#。它不应该伤害任何东西,因为浏览器应该正确解码它。但是如果要在该超链接中显示主题标签,则必须删除urlencode功能。

答案 1 :(得分:0)

在标签系统中,您的标签必须承担超链接的角色......

功能

//Tranforme text plain in hyperlinks!
function hashtag($hashtag){
     $hastag = preg_replace('/\#([-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i', '<a id="tags" href="hashtag.php?hashtag=$1" rel="nofollow">#$1</a>', $hashtag);
     return $hashtag;
}

//Usage: echo hashtag($your_string);
//NOTE: "id" in href for customization whit css

保存所有标签的功能,在保存到数据库时,在每个标签的末尾添加逗号:

function gethashtags($text){
   //Match the hashtags
   preg_match_all('/(^|[^a-z0-9_])#([a-z0-9_]+)/i', $text, $matchedHashtags);
   $hashtag = '';
   // For each hashtag, strip all characters but alpha numeric
   if(!empty($matchedHashtags[0])){
         foreach($matchedHashtags[0] as $match){
              $hashtag .= preg_replace("/[^a-z0-9]+/i", "", $match).',';
         }
   }
   //to remove last comma in a string
   return rtrim($hashtag, ',');
}

//Usage: $your_tag_for_save = gethashtags($your_tag_content);

保存数据库应该像搜索一样简单,所以我只留下示例查询:

搜索和结果最小示例:

<?php
   //Call to functions for this page!

   $tags = $_GET['hashtag'];
   $Search = $pdo->query("SELECT * FROM posts WHERE hashtag LIKE '%$tags%' ORDER By id DESC LIMIT 10");
   $Search->execute();

   while($fetch = $Search->fetch(PDO::FETCH_ASSOC)){

      $postID = $fetch['id'];
      $content = $fetch['content'];
?>

 <!-- Your HTML -->
 <div id="<?php echo $postID;?>"><!-- For use paggination, scroll, etc...-->

     <div id="db_post_content">
             <?php echo $content;?>
     </div>

 </div>
<?php
     }//End while !!!
?>

这个示例很简单,返回相同的标签,无论表列中存在多少个标签,都会返回相似的结果。

在示例中添加了一个限制,如果返回了很多标记,那么制作分页事件会很有意思。

PS:对不起,我不会说英语:P