2010-04-12 9 views
6

Stiamo permettendo agli utenti di cercare un database da un singolo input di testo e sto riscontrando delle difficoltà nel filtrare alcune stringhe fornite dall'utente.Convalida dell'input dell'utente o

Ad esempio, se l'utente invia:

��������� lcd SONY 

(noti la 's?) Ho bisogno di cancellare la ricerca.

ho includono le Base64 versione della stringa sopra avvolto codificati in modo che la sua facile esecuzione:

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z")); 

ho ignorato tali input prima, ma ora (non so perché) appena realizzato la query database mysql sta prendendo quasi sempre per l'esecuzione quindi questa è ora in alta priorità.

Un altro esempio per sottolineare che stiamo usando UTF-8 e mb_detect_encoding non aiuta molto:

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU=")); 
ΠΛυντηριο ρουχ�% 

Quindi:

  • come posso rilevare/filtrare questi ingressi?
  • come viene generato questo input?
+2

Rifiutare questi ingressi è la cosa sbagliata da fare. È necessario capire perché influenzano negativamente le prestazioni in primo luogo. – SLaks

+0

Questa è la prima linea di difesa. Al momento sono bloccato, quindi mi occuperò del problema delle prestazioni del database fino a quando non avrò un'idea brillante. – zaf

+0

Stai dicendo che l'utente sta effettivamente inserendo manualmente il carattere sostitutivo? http://www.fileformat.info/info/unicode/char/FFFD/index.htm –

risposta

1

Non dovrebbe essere sempre quella, ma se si vuole veramente per filtrare (che io non caldamente), fare un controllo per alfanumerica così come "- .;", ecc

Puoi utilizzare alcune di queste funzioni per aiutarti nel processo di filtraggio.

http://www.php.net/manual/en/function.ctype-alnum.php

+0

Gestisce qualcosa come "παπουτσια"? No. – zaf

0

Se si esegue queste query dopo aver creato la connessione a MySQL, si dovrebbe gestire utf-8 in ingresso e dei risultati bene senza sputare s '?.

mysql_query("SET character_set_client=utf8", $mysqlConn); 
mysql_query("SET character_set_connection=utf8", $mysqlConn); 
mysql_query("SET character_set_results=utf8", $mysqlConn); 

(supponendo che il database è impostato su UTF-8 e non vi dispiace non filtrando loro se non si trasformano in? 'S)

(anche supponendo che si sta utilizzando MySQL, altri dbms probabilmente ha funzioni simili)

+0

Otteniamo questo input dall'utente prima che tocchi anche il database. – zaf

Problemi correlati