2

私はウェブサイトで簡単な検索を実装していますが、現在、入力のサニタイズに取り組んでいます。私の計画は、許可された文字のホワイトリストを作成することです. 私はPHPを使用していますが、これまでのところ現在の正規表現を取得しています:

preg_replace('/[^a-z0-9 -]/i', '', $s);

そのため、英数字、スペース、ハイフン以外のものはすべて削除しています。

この種のことに対して一般的に受け入れられているホワイトリストはありますか、それともアプリケーションに依存しているだけですか? 本のタイトル、著者名、本の宣伝文句で検索します。

4

3 に答える 3

2

どう2010 (A space odyssey)ですか?ジスカール・デスタンの自伝はどうですか?...これは一般的に答えることは本当に不可能です。アプリケーションとデータ構造によって異なります。

選択したデータベースの全文検索機能、または Sphinx のような特殊な検索アプライアンスでさえ調べたいとします。

実際に検索を実行するために最初に使用するエンジンを明確にすると、何を削除する必要があるかに関するルールがより明確になります。

于 2010-11-05T17:02:32.277 に答える
0

Googleには検索に関するかなり高度なルールがいくつかありますが、基本的なルールは次のとおりです。

通常、@#$%^&*()= + [] \やその他の特殊文字を含め、句読点は無視されます。

ただし、Googleは、C ++、C#、$100などの一般的な検索用語については例外を設けています。

Googleのように高度な検索が必要な場合は、上記の句読点に対してルールを作成し、いくつかの例外を設けることができます。ただし、単純な検索の場合は、Googleが通常無視する文字を無視してください。

于 2010-11-05T17:05:44.460 に答える
0

この問題を解決する一般的な正規表現はありません。コードは、カンマ、感嘆符、(セミ)コロン、英語以外の文字など、保持したい多くのものを取り除きます。データベースにすべてのタイトルの完全なリストがある場合、すべてのタイトルで見つかったすべての文字のリストを作成するスクリプトを作成できるはずです。正規表現がこれらの文字のいずれかを取り除くと、問題が発生するリスクがあります (ただし、このテストに合格しても問題が発生しないわけではありません)

残りの検索の実装方法によっては、有効な文字を削除しても、関連する検索結果を返すことができる場合があります。この場合、(単語を分割したくないため) 英語以外の文字を式で許可する必要がありますが、引用符で区切られた句の内部にないすべての句読点を削除できる場合があります。たとえば、 を検索すると、検索でred haired得られるすべての結果にred-haired加えて、さらにいくつかの結果が得られるはずです。

于 2010-11-05T17:14:38.743 に答える