2010-04-12 168 views
6

我們讓用戶從單個文本輸入中搜索數據庫,並且在篩選某些用戶提供的字符串時遇到困難。驗證用戶輸入或

例如,如果用戶提交:

��������� lcd SONY 

(注意的?)我需要取消搜索。

我包括編碼包裹上面的字符串的版本中的Base64,以便其輕鬆運行:

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

我以前忽略了這種投入,但現在(我不知道爲什麼)剛剛意識到MySQL數據庫查詢幾乎是永遠執行,所以這現在是高度優先。

另一個例子強調,我們使用的是UTF-8和mb_detect_encoding是沒有幫助很大:

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

所以:

  • 我可以檢測/如何過濾這些投入?
  • 該輸入是如何產生的?
+2

拒絕這些輸入是錯誤的。您需要首先了解他們爲什麼會對性能產生負面影響。 – SLaks 2010-04-12 15:49:04

+0

這是第一道防線。我現在被卡住了,所以我現在要調查數據庫性能問題,直到我有一個好主意。 – zaf 2010-04-12 15:52:14

+0

你是說用戶實際上是手動輸入替換字符嗎? http://www.fileformat.info/info/unicode/char/FFFD/index.htm – 2010-04-12 16:15:43

回答

1

你不應該得到的是,雖然如果你真的想過濾(我不reccommend),做字母數字的支票,以及「 - ;」等

您可以使用其中一些功能來幫助您進行過濾。

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

+0

這是否處理像「παπουτσια」?第 – zaf 2010-04-12 15:56:13

0

如果在創建到MySQL連接後執行這些查詢,它應該處理UTF-8輸入和結果就好了不隨地吐痰?的。

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

(假定數據庫設置爲UTF-8,你不介意不過濾他們,如果他們不變成?的)

(也假設你正在使用MySQL,其他dbms可能具有相似的功能)

+0

在用戶接觸到數據庫之前,我們正在從用戶那裏獲得這個輸入。 – zaf 2010-04-13 17:26:26