搜索引擎问题

时间:2014-02-22 23:29:29

标签: php

我需要你的帮助。当用户输入复数词或形容词以找到我母语中的单数词时:捷克语。例如:当用户输入motorový时,它应该返回电机(现在返回motorov)而不是ový,当我进入motorce(返回motorc)时也是如此。似乎2letter和3letter check对我不起作用,1letter check检查工作。您可以在webiste上尝试我的代码。感谢您的努力,时间和良好的建议。

我的代码:

<!DOCTYPE html>
<html lang="cs">
<meta charset="utf-8" />
<head>
<title>Vyhledavac</title>
</head>

<body>
<form method="get" action="index.php">
    <input type="text" name="s_word" value="<?php $_GET['s_word'] ?>" /> <input type="submit" value="Hledat" />
</form>
<hr />
<?php
if(isset($_GET['s_word'])){
    $s = $_GET['s_word'];
    $s_word = $s;
    $l_word = substr($s_word,-3);
    if($l_word == "ovi" or $l_word == "ovy" or $_l_word == "ový" ){
        $s_word = rtrim($s_word,$l_word);
    }
    $l_word = substr($s_word,-2);
    if($l_word == "ce" or $l_word == "ku" or $l_word == "em"){
        $s_word = rtrim($s_word,$l_word);
    }
    $l_word = substr($s_word,-1);
    if($l_word == 'y' or $l_word == 'i' or $l_word == 'u' or $l_word == 'e' or $l_word == 'ů' or $l_word == 'ý'){
        $s_word = rtrim($s_word,$l_word);
    }
    $query = "SELECT * FROM search_test WHERE title LIKE '%$s_word%' OR message LIKE '%$s_word%'";
    echo "$query";
    mysql_connect("localhost","user","passwd") or die('spatne pripojeni');
    mysql_select_db("search") or die('nelze najit databazi');
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");

    $query = mysql_query($query) or die('spatny dotaz');
    $numrows = mysql_num_rows($query);

    if($numrows > 0){
        while($row = mysql_fetch_assoc($query)){
            $id = $row['id'];
            $title = $row['title'];
            $message = $row['message'];
            $website = $row['website'];
            echo "<h2><a href='$website'>$title</a></h2><br /><p>$message</p>";
        }
    }else{
        echo "Žádné výsledky pro dotaz: ".$s_word."<br />";

    }
}
?>
</body>
</html>

3 个答案:

答案 0 :(得分:0)

它只给你一个字符:

$l_word = $s_word[strlen($s_word)-3];

尝试使用substr()。

$l_word = substr($s_word, -3);

答案 1 :(得分:0)

不应该这样:

$l_word = $s_word[strlen($s_word)-3];

类似于:

$l_word = substr($s_word,-3);

你现在拥有它的方式,它只会给你$l_word一个字符,而不是你认为你减去的数量。这意味着$l_word == "ovi"永远不会匹配。

例如:

<?php
$s_word = 'motorce';
$l_word = $s_word[strlen($s_word)-3];
echo $l_word;

将返回:

r

Live DEMO 以及您真正想要的是:

<?php
$s_word = 'motorce';
$l_word = substr($s_word,-3);
echo $l_word;

返回:

rce

<强> Live DEMO.

答案 2 :(得分:0)

不是一个完全有效的解决方案,但我会采取的道路(假设UTF-8编码文件):

$word = $_GET["s_word"];
$removelist = array("ový","ce");
foreach($removelist as $entry) {
   if ((pos = mb_stripos($word,$entry)) !== FALSE) {
      $word = mb_substr($word,$pos);
      break;
   }
}

现在应该修剪$word并准备好进行搜索,否则你应该在列表中添加更多内容。