2010-11-05 5 views
2

Я реализую простой поиск на веб-сайте, и сейчас я работаю над дезинфекцией ввода. Мой план состоит в том, чтобы сделать белый список допустимых символов. Я использую PHP, и до сих пор у меня есть текущее регулярное выражение:Хороший белый список для поисковых запросов

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

Итак, Я удаляю нибудь, что это не алфавитно-цифровой или пробел или дефис.

Есть ли общепринятый белый список для такого рода вещей или он просто зависит от приложения? Я буду искать названия книг, имена авторов и рекламные ролики.

ответ

2

Как насчет 2010 (A space odyssey)? А как насчет автобиографии Жискара д'Эстайна? ... Это вообще невозможно ответить в целом, это будет зависеть от вашего приложения и структуры данных.

Вы хотите изучить функции полнотекстового поиска в базе данных по вашему выбору или даже специализированные поисковые устройства, такие как Sphinx.

Уточните, какой движок вы будете использовать, прежде всего, чтобы выполнить свой поиск, а правила о том, что вам нужно сделать, станут намного яснее.

+1

Это '2001: космическая одиссея' –

+0

@Refe, вы правы. –

0

Google имеет некоторые довольно продвинутые правила для поиска, но их основное правило заключается в следующем:

Как правило, знаки препинания игнорируются, в том числе @ # $%^& *() = + [] \ и другие специальные персонажи.

Однако Google делает исключения для обычных поисковых запросов, таких как C++, C# или 100 долларов США.

Если вы хотите найти такой сложный, как Google, вы можете сделать правила против вышеуказанной пунктуации и иметь некоторые исключения. Однако для простого поиска просто игнорируйте символы, которые Google обычно игнорирует.

+0

«поиск такой сложный, как Google» кажется мне довольно трудным :-) – Philipp

+0

@Philipp: наверняка. Вот для чего нужен пользовательский поиск Google! –

0

Для решения этой проблемы не существует обычного регулярного выражения. Ваш код выделяет много вещей, которые вы, возможно, захотите сохранить, например, запятые, восклицательные знаки, (полу) двоеточия и неанглийские буквы. Если у вас есть полный список всех названий в вашей базе данных, вы должны иметь возможность написать сценарий, который будет содержать список всех символов, найденных во всех ваших заголовках. Если ваше регулярное выражение вычеркивает любой из этих символов, вы рискуете иметь проблемы (хотя передача этого теста не означает, что вы не будете сталкиваются с проблемами).

В зависимости от того, как реализована остальная часть вашего поиска, вы можете удалять действительные символы и при этом возвращать соответствующие результаты поиска. В этом случае вы хотели бы, чтобы ваше выражение позволяло использовать неанглийские символы (поскольку вы не хотите разбивать слово), но вы можете удалить все знаки препинания, которые не находятся внутри фразы с разделителями с котировкой. Например, поиск red haired должен дать вам все результаты, которые вы получили бы от поиска red-haired плюс несколько дополнительных.

Смежные вопросы