我正在使用MySQL和'like'查询来查找页面。我需要能够以这种方式做事,但这意味着这些页面将是相同的:
www.mysite.com/blog/hello-world
www.mysite.com/blog/hello-worl
他们都工作,并提出相同的页面。如何(可能使用.htaccess?)可以解决这个问题? :\
非常感谢
编辑:
PHP -
if(isset($_GET['title'])) {
$blogtitle=mysql_real_escape_string($_GET['title']);
$title_two = strtolower(str_replace("-", " ", $blogtitle));
$title_two = strtolower(str_replace("?", "", $title_two));
$title_two = mysql_real_escape_string($title_two);
$postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;";
$postquery = mysql_query($postmatch) or die ("Could not match data because ".mysql_error());
$blogtitle=mysql_result($postquery,0,"title");
$title="$blogtitle";
答案 0 :(得分:1)
你能说明你需要这样做的原因吗?
你需要“hello-world”和“hello-world123”匹配,而不是“hello-worl”吗?
否则,我想不出你想要使用LIKE但不想让“hello-worl”匹配的任何理由。
答案 1 :(得分:1)
为什么不替换它:
$postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;";
......用这个?
$postmatch = "select * from blog where title LIKE '$title_two' LIMIT 1;";
这样你无论大小写如何都在搜索,但不管周围的角色如何都不匹配。
答案 2 :(得分:0)
你有这个网址:www.mysite.com/blog/hello-world WHERE hello world 是搜索字符串
我建议你将它们存储到像
这样的数组中$keyWrd = array();
$keyWrd = strtolower($_GET['keywd']); // MUST DO VALIDATION
$keyWrd = explode(" ",$keyWrd);
$TotalKeyVal = count($keyWrd);
if(!empty($keyWrd[0]))
{
$SrcQryStr = "SELECT id,title,body FROM tbl_name WHERE";
for($i=0;$i<$TotalKeyVal;$i++)
{
$SrcQryStr .= " title LIKE '%";
$SrcQryStr .= $keyWrd[$i];
$SrcQryStr .= "%'";
$SrcQryStr .= ' OR ';
$SrcQryStr .= " body LIKE '%";
$SrcQryStr .= $keyWrd[$i];
$SrcQryStr .= "%'";
if(($TotalKeyVal-1)!=$i) $SrcQryStr .= ' OR ';
}
$SrcQryStr .= " ORDER by created_date DESC";
现在您拥有 $ SrcQryStr 查询字符串您可以在if(!empty($keyWrd[0]) && MORE HERE)
上创建更多条件在这里,您可以使用implode或多个implode而不是for循环。
现在为什么%。$ keywd。%
示例:
STRING:欢迎来到Stack Overflow!
搜索关键字:ack
它会显示匹配,因为在堆栈 WHILE%上找到了确认。$ keywd。%
未显示匹配,因为没有以ack WHILE $ keywd开头的单词。%
它会不显示匹配,因为没有确切的单词ack WHILE $ keywd