In javascript, you can just use decodeUri
var xml = decodeURI('%3CMESSAGE%3E%0A%3CAUTHKEY%3EYour%20auth%20key%3C/AUTHKEY%3E%0A%3CSENDER%3ESenderID%3C/SENDER%3E%0A%3CROUTE%3ETemplate%3C/ROUTE%3E%0A%3CCAMPAIGN%3Ecampaign%20name%3C/CAMPAIGN%3E%0A%3CCOUNTRY%3Ecountry%20code%3C/COUNTRY%3E%0A%3CSMS%20TEXT%3D%22message1%22%3E%0A%3CADDRESS%20TO%3D%22number1%22%3E%3C/ADDRESS%3E%0A%3C/SMS%3E%0A%3C/MESSAGE%3E%0A');
gives you
<MESSAGE>
<AUTHKEY>Your auth key</AUTHKEY>
<SENDER>SenderID</SENDER>
<ROUTE>Template</ROUTE>
<CAMPAIGN>campaign name</CAMPAIGN>
<COUNTRY>country code</COUNTRY>
<SMS TEXT%3D"message1">
<ADDRESS TO%3D"number1"></ADDRESS>
</SMS>
</MESSAGE>
As you can see, the text is encoded twice.
You will need to decode again.
var finalResult = decodeUriComponent(xml) // gives you
<MESSAGE>
<AUTHKEY>Your auth key</AUTHKEY>
<SENDER>SenderID</SENDER>
<ROUTE>Template</ROUTE>
<CAMPAIGN>campaign name</CAMPAIGN>
<COUNTRY>country code</COUNTRY>
<SMS TEXT="message1">
<ADDRESS TO="number1"></ADDRESS>
</SMS>
</MESSAGE>
Which is now valid xml, and can be parsed using jQuery.
$.parseXML(finalResult);
additionally
// to parse the complete url in chrome and mozilla
var xmlString = new URLSearchParams('YOUR FULL URL HERE').values().next()