Is it normal for PHP not to decode $_POST sent as application/x-www-form-urlencoded through AJAX?
I want to use urldecode but it gets rid of my + characters. Help?
:
15:51:55.490[755ms][total 755ms] Status: 200[OK]
POST Load Flags[LOAD_BYPASS_CACHE LOAD_BACKGROUND ] Content Size[72] Mime Type[text/html]
Request Headers:
Host[]
User-Agent[Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8]
Accept[text/html, */*]
Accept-Language[en-us,en;q=0.5]
Accept-Encoding[gzip,deflate]
Accept-Charset[ISO-8859-1,utf-8;q=0.7,*;q=0.7]
Keep-Alive[115]
Proxy-Connection[keep-alive]
Content-Type[application/x-www-form-urlencoded; charset=UTF-8]
X-Requested-With[XMLHttpRequest]
Content-Length[164]
Pragma[no-cache]
Cache-Control[no-cache]
Post Data:
id[133]
content[%253Cp%253E%250A%2509Test%2520test%2520-%2520this%2520will%2520disappear%253A%2520%2B%253C%2Fp%253E%250A]
title[Plus%2520character%2520not%2520working]
Response Headers:
Via[1.1 KIGALI]
Connection[Keep-Alive]
Proxy-Connection[Keep-Alive]
Content-Length[72]
Date[Mon, 02 Aug 2010 03:51:55 GMT]
Content-Type[text/html; charset=utf-8]
Server[Apache/2.2.12 (Ubuntu)]
X-Powered-By[PHP/5.2.10-2ubuntu6.4]
Vary[Accept-Encoding]
Keep-Alive[timeout=15, max=100]
Part of urldecode‘s functionality is to turn
+signs into spaces. To get around this, you should urlencode any+signs in your string, so they turn into%2BSo:
Now, the superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results. I’m not sure about
$_POST. But it well may be decoded too.From your question, I’m not sure exactly what you’re dealing with, but looking over the comments on urldecode in the PHP manual, here is a comment you may be interested in:
It's worth pointing out that if you are using AJAX and need to encode strings that are being sent to a PHP application, you may not need to decode them in PHP.Will properly output a message sent with the javascript code if the message is encoded:And is sent with an AJAX POST request with the header: