2010-08-08 17 views

回答

1

對於初學者,請確保您閱讀了SQL注入。您需要採取強有力的預防措施,以便安全地編碼輸入。通常,你會過濾/丟棄不安全的內容。所以,如果你真的需要允許,那麼你需要小心,你不容易破解自己。

實質上,您需要相同的保護措施,同時允許像這樣的網站使用「源代碼示例」這樣的「危險」內容。此外,系統通常是針對性的,如PHPBB2,WordPress,Wiki等。

我認爲如果數據需要搜索,您的任務就會變得更加困難。

如果您使用的是PHP中,mysql_real_escape_string()函數看起來很不錯: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php 否則,使用somethign類似。

+0

感謝克里斯的領導。人品問題呢?目前它顯示?當用戶輸入非英文字符時。 – poer 2010-08-08 16:11:54

+0

@poer - 你一定需要使用Unicode。其他答案是現場的,特別是與Joel的文章相關的答覆。 – 2010-08-08 17:27:19

2

您需要使用Unicode。請閱讀MySQL manual section on Unicode和Joel Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

您可能希望將所討論的表/列的字符集(編碼)設置爲utf8。您還需要將HTML/PHP文件的編碼設置爲UTF-8。頭阿帕奇/ PHP送出:您可以在<頭>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

您還可以設置內容類型與meta標籤做到這一點。

即使在設置此設置後,您仍然可能會遇到瀏覽器特定的問題。例如,Internet Explorer可能不總是使用UTF-8,所以Rails 3 had to put in a workaround

+0

謝謝你保羅。 – poer 2010-08-08 23:53:49

2

對於MySQL,首先需要與UTF8字符集定義數據:

CREATE DATABASE xx [...] DEFAULT CHARACTER SET 'utf8' DEFAULT COLLATE utf8_general_ci 

和創建從PHP數據庫連接時,你只需要打開它後,運行快速命令:

SET NAMES 'utf8' 

或者,如果你有MySQL的my.ini的訪問,你可以添加這個到配置,忘記了上面:

skip-character-set-client-handshake 
collation_server=utf8_unicode_ci 
character_set_server=utf8 

(注意,不是php.ini中,但MySQL的INI)


對於PHP,如果您需要處理多字節字符串:請確保您有mbstring庫活動狀態,然後改變你的字符串&正則表達式的函數調用使用mb_ *等價物。

另外,請確保您的編輯器以UTF8格式保存,以保持一致。 Eclipse/PDT使得它很容易,至少(項目 - >屬性 - >文本文件編碼)。


最後,處理文化差異:這是最難的部分。有時候,就像在CSS中設置p { direction: rtl; }一樣簡單,而其他時候,你會撕毀你的頭髮,試圖破譯用戶剛發佈的字母表。這取決於你在用不同的語言做什麼。

+0

謝謝tadamson。 – poer 2010-08-08 23:47:54

+0

還有一個問題,如果我執行alter命令來更改默認字符和排序規則,那麼當前保存的數據會發生什麼? – poer 2010-08-08 23:56:30

+0

通常數據將被轉換爲UTF8。如果您改用US-ASCII,轉換可能是一個問題,但UTF8可以處理大部分投入的問題。 – tadamson 2010-08-09 15:30:21

相關問題