2009-12-01 45 views
1

我有一個獲取客戶信息的Web表單。該表單使用PHP 5.1.6進行處理,因此使用filter_input()將不起作用。從Web表單輸入清理PHP字符串

表格有一個文本區域以及一些其他標準字段。我收到很多奇怪的格式化代碼,這些代碼存儲在我們的MySQL數據庫中。我怎樣才能過濾這些結果,他們看起來從字符串格式?

之前
寶寶的房間在哪裏?我認爲這是在房子的北面。你知道在哪裏嗎?

之後(這是我想看到的)
寶寶的房間在哪裏?我認爲這是在房子的北面。你知道在哪裏嗎?

+0

你確定這些是格式化字符串,而不僅僅是使用錯誤的字符集的結果?因爲它看起來像我。什麼是你的頁面的字符集/表單的接受字符集和什麼是數據庫的字符集? – Zenon 2009-12-01 18:16:52

+0

我正在使用MyISAM,使用latin1字符集和latin1_sweedish_ci排序規則。 – meme 2009-12-01 18:22:53

回答

1

這是幾乎可以肯定,由於有人從不相容的字符集剪切和粘貼。

最佳的猜測,他們是從使用非ASCII的Unicode符號報價和語音標記,而不是正常的友好ASCII那些Microsoft Word中這樣做。 UTF-8編碼爲80-FF中一系列兩個或更多字節,但通常將網頁設置爲「latin-1」,將這些字節視爲單個字符,通常爲帶有重音符號的a-z。如果你看到2或3個字符,你可以期待它,其中一些是帶有重音符號的奇怪的拉丁符號,它差不多總是意味着你的數據是utf-8,但它是通過拉丁-1來渲染的。

例外情況是當它以utf-8的形式輸入時,系統預期的 latin-1首先被輸入。確保你的HTML表單明確地設置了一個字符類型。

一般情況下,我會建議你讓你的所有基於Web的工具,使用「UTF-8」沒有一個該死的好理由不這樣做。

更新:這有點噁心,但我建議你不要擔心數據庫字符集太多。實際上,我們應該默認使用utf-8,但是如果將utf-8數據放入latin-1表中,那麼返回的數據仍然是utf-8,只要沒有任何數據庫向數據庫詢問它認爲發送給您的內容。我說的是,MySQL不太可能導致問題。它可以是剪切粘貼,瀏覽器,Web表單,從代碼中讀取表單並寫入數據庫,或者也可能是代碼從數據庫中讀取並呈現HTML。

嘗試使用iffy字符檢查頁面的字符編碼。嘗試在瀏覽器中將其設置爲utf-8或強制utf-8。在Firefox中查看 - >字符編碼。

+1

UTF-8的+1。現在差不多是2010年,我們不應該仍然在編寫不能使用Unicode的應用程序。 – bobince 2009-12-01 19:31:36

1

他們還派遣UTF8串到你的數據庫,並且數據庫可能是期望拉丁文。首先確保你的表設置爲utf8,如果它沒有設置爲utf8。然後嘗試在其他任何事情之前運行此查詢:

set names utf8 

這將設置連接的字符集爲utf8。然後你可以運行你的其他查詢。

而且閱讀:

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

0

讀您的文章後,我唯一能告訴你的是檢查你的表單標籤和「接收字符」屬性添加到您想要的值。

因爲這是你必須從形式發佈的數據,那麼你可能要檢查它的問題。

如果您存儲在數據庫表中的數據後,有這樣的問題,那麼你可能要檢查與數據庫表串排序規則/字符集。

+0

請勿使用「accept-charset」。它在IE上不起作用(並且是有害的)。請將包含表單的頁面的字符集設置爲您想要提交的頁面的字符集。 – bobince 2009-12-01 19:30:24