2012-04-20 73 views
1

好吧我幾個小時都一直在搞這個,現在我仍然搞不清楚,所以我會問你們。JS/PHP cross urlencoding和urldecoding

我在html中有一個textarea,需要使用ajax(jquery)將值發送到php,然後轉換爲數據庫,並使用php再次打印。問題是我希望在印刷100%一樣的,你在鍵入的內容包括像'\

我現在該怎麼辦呢人物:

var comment = escape(box.find('#newCommentArea').val()).replace(new RegExp("\\+", "g"),"%2B"); 

哪裏box.find('#newCommentArea').val()是值。我使用ajax函數將comment傳遞給php,並將其作爲POST數據提交。

使用Firebug這是什麼似乎派:comment=asdf%27asdf

印刷$_POST['comment']在PHP給我asdf\'asdf

增加\是一個問題。我需要擺脫它。

無論哪種方式,因爲只有JavaScript逃避不是在PHP安全我也做urlencode()

和打印時,我使用rawurldecode()

難道你們指出,如果這是一個好方法,或者它可能是做得更好。

,我如何獲得提前$_POST['comment']

由於擺脫了新\的,

MakuraYami

回答

2

斜槓是自動添加的,PHP或服務器可以更改(但通常不應該)的設置。您可以使用stripslashes()PHP: stripslashes)將其撤銷。在顯示之前立即使用這個功能,所以不要在存儲到數據庫之前。

如果已經發送了urlencode(urlencode需要在發送之前),那麼您不需要再次使用urlencode,您只需確保數據庫安全。

不幸的是,我不能告訴你URL編碼的最佳方式是什麼,我傾向於自己弄糊塗:)希望別人能夠澄清這一點。

+0

好吧,這個作品相當不錯,我覺得我很困惑,因爲我從JavaScript發送urlencoded字符串,但在PHP它awsnt編碼了:/反正使用stripslashes運作良好,現在顯示相同的輸入! – MakuraYami 2012-04-20 10:00:01

1

當您將打印保存在數據庫中的文本,該\'將顯示爲'。因此,可以將值\'保存到數據庫中。

此外,如果您使用jQuery發出請求,您不需要在請求前轉義'字符,應該將其正確打包。

但是,在將其保存到數據庫之前,您確實需要注意清理PHP中的文本(使用mysql_real_escape_stringhttp://php.net/manual/en/function.mysql-real-escape-string.php)。

+0

謝謝,但你真的認爲我沒有測試它是如何顯示的嗎?當我打印它時,停留在那個位置,這就是問題所在。mysql_real_escape_string給我錯誤,說它找不到連接,我仍然使用PDO函數來防止sql注入。 – MakuraYami 2012-04-20 09:53:24

+0

我明白了。正如Armatus所建議的,您可以在顯示文本之前使用'stripslashes'功能。如果你正在使用PDO,你不需要調用'mysql_real_escape_string'。關於JavaScript,我仍然建議不要手動進行轉義。 – 2012-04-20 09:58:56

+0

我做了逃避,因爲當你使用&字符在javascript中提交字符串作爲POST時,它會殺死它,因爲它認爲下一個變量已被創建。 – MakuraYami 2012-04-20 11:23:16