12

PHP not decoding POST

 2 years ago
source link: https://www.codesd.com/item/php-not-decoding-post.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

PHP not decoding POST

advertisements

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 %2B

<?php
$theTag = 'c++';
urldecode($theTag);
  // output is "c  "
$theTag = urlencode($theTag);
urldecode($theTag);
  // output is "c++"
?>

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.

<?php
echo stripslashes(nl2br($_POST['message']));
?>

Will properly output a message sent with the javascript code if the message is encoded:

message = encodeURIComponent(message)

And is sent with an AJAX POST request with the header:

ajaxVar.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')

Tags php

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK