所以我有一个数据库,我存储了I love #cats
和I 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);
答案 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