1

私はいくつかのスクリプトに取り組んでおり、検索を作成したいと思います。私のプロジェクトはCodeIgniterに基づいており、すべてのコードコンテンツをCodeIgniterと互換性があるようにすることが私の望みです。

それで、私はすでに検索のためのクエリに取り組んでいますが、それは複数の単語をサポートしていないので良くありません。したがって、検索フォームに「test」という単語を入力すると(テスト単語がデータベースのいずれかのフィールドにあると想定)、結果はほとんどありませんが、「test test test」という単語を入力すると(ここでも、テスト単語はいずれかのフィールドのデータベース)結果はありません。

私の現在のクエリ:

$this->db->select('title, content, date, hyperlink')->or_like(array('title' => $query, 'content' => $query))->order_by('id_article', 'desc')->get('news');

次の問題はURIにあります。「ある記事、今日は晴れ」を検索すると、カンマに問題があり、他の場合にはおそらく他の許可されていない文字にも問題があるからです。私はそこで他のいくつかの質問を読みましたが、私が見つけたのは$this->uri->uri_to_assoc()、私のプロジェクトでは英語を使用していないため、私の場合は機能しないと思うものだけです。

これら2つの問題の最善の解決策は何ですか?

4

1 に答える 1

1

検索の問題を解決するには、おそらくクエリを細かく分割する必要があります。

$query = 'test test 2 test3';
$parts = explode(' ', $query);

次に、パーツをループして、or_like条件を追加します。

foreach ($parts as $q)
{
    $this->db->or_like(array('title' => $q, 'content' => $q));
}

これで、単語のいずれかをチェックします。

また、引用符で囲まれた値を1つの単語として処理して、「テスト2」がテストと2だけでなく、シーケンステスト2を検索するようにすることもできます。たとえば、次のような正規表現を使用して、パーツの取得方法を調整する必要があります。 :

preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $query, $parts);

URIの無効な文字については、文字列を一方の端でurlencodeに渡し、もう一方の端でurldecodeに渡します。

$uri = urlencode('some article, today is sunny');
于 2012-05-01T18:09:22.403 に答える