module.exports = function urldecode(str) { // discuss at: https://locutus.io/php/urldecode/ // original by: Philip Peterson // improved by: Kevin van Zonneveld (https://kvz.io) // improved by: Kevin van Zonneveld (https://kvz.io) // improved by: Brett Zamir (https://brett-zamir.me) // improved by: Lars Fischer // improved by: Orlando // improved by: Brett Zamir (https://brett-zamir.me) // improved by: Brett Zamir (https://brett-zamir.me) // input by: AJ // input by: travc // input by: Brett Zamir (https://brett-zamir.me) // input by: Ratheous // input by: e-mike // input by: lovio // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Rob // reimplemented by: Brett Zamir (https://brett-zamir.me) // note 1: info on what encoding functions to use from: // note 1: https://xkr.us/articles/javascript/encode-compare/ // note 1: Please be aware that this function expects to decode // note 1: from UTF-8 encoded strings, as found on // note 1: pages served as UTF-8 // example 1: urldecode('Kevin+van+Zonneveld%21') // returns 1: 'Kevin van Zonneveld!' // example 2: urldecode('https%3A%2F%2Fkvz.io%2F') // returns 2: 'https://kvz.io/' // example 3: urldecode('https%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3DLocutus%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a') // returns 3: 'https://www.google.nl/search?q=Locutus&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a' // example 4: urldecode('%E5%A5%BD%3_4') // returns 4: '\u597d%3_4' return decodeURIComponent( (str + '') .replace(/%(?![\da-f]{2})/gi, function () { // PHP tolerates poorly formed escape sequences return '%25' }) .replace(/\+/g, '%20'), ) }