2013-06-03 58 views
0

這更多的是理論問題,而不是實際問題。 一些基本輸入傳遞給我的服務器。 一般來說,我編碼它,但我做而不是雙重編碼它。在MySQL中以PHP存儲之前的雙重編碼輸入

我在想這個決定可能產生的任何問題。 之一,如果有人進入我的網站上形式在以下兩個字符串:

Apples & Bananas 
Apples & Bananas 

這些將分別被存儲爲,由於單一的編碼:

Apples & Bananas 
Apples & Bananas 

如果我將它們輸出,我會先解碼他們。然後,用戶將看到:

Apples & Bananas 
Apples & Bananas 

的來源是:

Apples & Bananas 
Apples & Bananas 

因此,我將失去一些提交的結構,因爲以它的編碼版本的實體將基本上相等,一經提交。

我的直覺是,他們應該總是雙重編碼,但我會好奇聽到另一個意見。

+0

我可以建議 - 雙重編碼和存儲正確的數據比有錯誤的數據更好。 您不會丟失有效數據,但數據不正確。爲什麼介意?用戶會很樂意獲得更正的數據。 – RGV

+0

我認爲你使用了錯誤的編碼方法。如果您使用適當的MySQL編碼,則從數據庫讀回時不應更改。 – cgTag

+0

另外,如果您使用PDO對象,則不需要編碼。 – cgTag

回答

1

通常,您應該只將這些編碼應用於真正必要的數據。在MySQL string literal的情況下,它是圍繞引號字符和轉義字符本身以及其他字符的轉義。

但是,&不是MySQL字符串文本中的關鍵字符,因此不應編碼,特別是不要使用不合適的編碼,如HTML字符引用。 HTML字符引用編碼僅適用於在HTML中輸出數據的相應上下文中,其中純文本HTML特殊字符可能會導致用戶提供的數據被誤解爲作者提供的數據。

現在關於「雙重編碼」,如果用戶輸入&,我希望我的應用程序將其顯示爲&,因此要求它將其編碼爲&。因此,無論用戶輸入什麼內容,我都會對所有內容進行編碼。

+0

完全感謝徹底的意見Gumbo。這有助於引導我以正確的方向滿足我的需求。 – onassar