I'm trying to send the request using ajax:
    const formBody = document.getElementById('body'); // my form data
    const XHR = new XMLHttpRequest();
    const params = "body=" + formBody;
    
    XHR.open("POST", window.origin + '/CreateFormAction');
    XHR.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    XHR.send(params);
The corresponding IHP action:
action CreatePostAction = do
        rBody <- getRequestBody
        putStrLn $ tshow rBody -- this returns: ""
        renderPlain "Request Received"
When I try sending special characters like '$', '+', etc., this is the request I get on server:
POST /CreatePostMessage
  Params: [("body"," ")]
  Request Body: body=+
  Accept: */*
  Status: 200 OK 0.025023s
 
                        
You have to encode the formBody using
encodeURIComponent()to encode special characters as follows:Your IHP action should be able to handle special characters then.