2009-07-15 8 views
5

Używam solr z rubinem na szynach. To wszystko działa dobrze, po prostu muszę wiedzieć, czy istnieje jakiś istniejący kod do sanityzacji danych wprowadzanych przez użytkownika, na przykład zapytanie zaczynające się od? lub *Solit oczyszczające zapytanie

Odpowiedz

7

Nie znam żadnego kodu, który to robi, ale teoretycznie można to zrobić, patrząc na parsing code in Lucene i szukając throw new ParseException (tylko 16 meczów!).

W praktyce uważam, że lepiej jest po prostu uchwycić wyjątki od Solr w kodzie i wyświetlić komunikat "nieprawidłowe zapytanie" lub coś w tym stylu.

EDIT: Oto kilka "odkażających":

1

Jeśli używasz Solarium z PHP, możesz użyć metody Solarium_Escape::term().

/** 
* Escape a term 
* 
* A term is a single word. 
* All characters that have a special meaning in a Solr query are escaped. 
* 
* If you want to use the input as a phrase please use the {@link phrase()} 
* method, because a phrase requires much less escaping.\ 
* 
* @link http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping%20Special%20Characters 
* 
* @param string $input 
* @return string 
*/ 
static public function term($input) 
{ 
    $pattern = '/(\+|-|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\\)/'; 

    return preg_replace($pattern, '\\\$1', $input); 
}