2011-07-01 47 views
0

所以,簡而言之,我試圖創建一個正則表達式,我可以在將要提交JSON對象到我的PHP服務器的Java程序中使用。輸入消毒不破壞JSON語法

myString.replaceAll(myRegexString,"");

我的問題是,我絕對沒有好與正則表達式,並添加到我需要轉義字符正確作爲其存儲在一個字符串,然後還要正確轉義正則表達式裏面的人物。好小子。

我想出什麼樣的主意是這樣的:

String myRegexString = "[\"',{}[]:;]"

的第一個反斜槓是逃跑外引號,以獲得一個「在那裏,然後我突然想到那{}和[]也正則表達式。命令我會逃跑的,以及像:?提前

String myRegexString = "[\"',\{\}\[\]:;]"

感謝萬一它不是明確從上面唯一的字符我真的很在乎這個時刻的例子是: " { } [ ] ,; : '一般sqlinj保護。

UPDATE:

這是最後的正則表達式: [\\Q\"',{}[\]:;\\E]爲別人好奇。謝謝阿米特!

+0

對於那些逃脫的角色,你需要雙反斜線。例如。 ''[[\\'',\\ {\\} \\ [\\] \\ :;]「'以便Java將反斜線字符傳遞給正則表達式引擎。否則,Java將查找特殊字符'\ [''這不存在 –

+0

@Matt,'''不能被雙重轉義(否則會發生編譯時錯誤)。另外,''''''''''和':'完全不需要在字符類中進行轉義。 –

回答

1

試着這麼做

String myRegexString = "[\\Q\"',{}[]:;\\E]"; 

現在\ Q和\ E之間的字符現在都被視爲正常的字符。

+0

嘿,感謝這個很酷的符號。根據正則表達式助手我不得不逃脫],或者它提前結束了系列。所以我得到了'[\\ Q \'',{} [\]:; \\ E]'在java中,我需要在所有反斜槓上加倍翻頁嗎? – Eric

+0

Nvm。 。如果其他人可能需要使用它,我會重新張貼最後一張。 – Eric

3

爲什麼不使用實際的JSON編碼API /框架?你在做什麼不是消毒。你在做什麼是破壞數據。如果我的名字是O'Reilly,我希望它被拼寫成O'Reilly,而不是Oreilly。如果我發送包含[或{的消息,我希望這些消息在消息中。使用一個框架或API在需要時轉義這些字符,而不是盲目地刪除它們。

使用JSON搜索Java會引導您使用許多API和框架。

+0

我同意,我正在破壞數據,但這是我需要做的。我不在乎你是否想要你的用戶名是O'Reilly,將它粘貼在我的數據庫中,它將成爲OReilly – Eric

+0

它是一款休閒遊戲,關於這個遊戲的精彩之處在於,你想讓你的用戶名成爲O'Reilly,你可以繼續輸入O'Reilly 。它每次都會像OReilly一樣出現,它仍然可以工作 – Eric

+3

當你是一個認真的開發人員時,讓事情「工作」是不夠的,你必須讓事情順利進行,想象一下,如果這個網站(計算器.com)確實刪除了所有帖子中的所有引號,括號和花括號,確定它仍然有效。但有人會用它嗎?如果您計劃通過過濾來避免SQL注入攻擊;和',你做錯了,這是行不通的。使用預準備的語句 –