2011-05-05 62 views
3

使用ajax get方法傳遞一個變量。在那裏我使用escape()函數來逃避字符串。如何避開字符串?

在PHP中,我得到的價值,並插入到數據庫中。

如何避開字符串?

例如,對於:

balaji's 

我得到

balaji%27s. 

回答

1

考慮PHP函數,urldecode()rawurldecode()

看來,一個區別是在處理+(加號)。

您應該確保使用包含加號的字符串進行測試,以確保您選擇了正確的功能。

+1

無論'urldecode()',也沒有做過'rawurldecode()'完全適用於'escape()'d的數據。一般的consenus是使用'encodeURIComponent()'代替。 – 2011-05-05 07:23:27

+0

我低估了,因爲它可以*看起來*長時間工作,直到遇到函數不匹配的字符。沒有任何個人@jedwards – 2011-05-05 07:26:37

+0

@Pekka,我認爲要求OP改變它的編碼方式是非常冒險的。問題不是「我該如何做到這一點從頭到尾」,而是「我該如何解碼js的escape()」生成的字符串。此外,我不知道任何由escape()編碼的字符都不會被urldecode()解碼,是嗎? – jedwards 2011-05-05 07:27:29

4

而不是在客戶端使用escape,請使用encodeURIComponentescape確實不是做URI編碼。 (它做了類似的事情,但不同,以至於會遇到麻煩。)encodeURIComponent執行標準的URI編碼。 PHP都應該是正常的方式發送數據,例如,它會自動爲您解碼:

var word = "balaji's"; 
$.ajax({ 
    url: "yoururl", 
    data: encodeURIComponent("word") + "=" + encodeURIComponent(word) 
}); 

如果你不是在默認的「多形式」發送數據形式(例如,你覆蓋dataType),你必須通過urldecode自己解碼。

+0

我想encodeURIComponent方法它不工作 – user737767 2011-05-05 07:30:58

+0

@user:你必須發佈完整的Ajax調用和您使用的是處理它的PHP代碼。 – 2011-05-05 08:04:08

8

您可以使用此功能,而不是urldecode()

function utf8_urldecode($str) { 
     return html_entity_decode(preg_replace("/%u([0-9a-f]{3,4})/i", "&#x\\1;", urldecode($str)), null, 'UTF-8'); 
} 
+0

對我來說,這是需要了解的是'html_entity_decode($海峽,空, 'UTF-8')'解碼轉義字符,如 「&#227」。我只是把它寫在這裏,所以如果他們和我有同樣的問題,那麼其他人就會更容易看到它。 – VinGarcia 2017-09-04 14:38:38

8

使用我與

用htmlspecialchars(urldecode($ STR))