Install via yarn add locutus and import:
import { http_build_query } from 'locutus/php/url/http_build_query'.
Or with CommonJS: const { http_build_query } = require('locutus/php/url/http_build_query')
Use a bundler that supports tree-shaking so you only ship the functions you actually use.
Vite,
webpack,
Rollup, and
Parcel
all handle this. For server-side use this is less of a concern.
Examples
These examples are extracted from test cases that automatically verify our functions against their native counterparts.
if (Array.isArray(formdata)) { for (let index = 0; index < formdata.length; index += 1) { const value = formdata[index] if (typeof value === 'undefined') { continue } let queryKey = String(index) if (numericPrefix) { queryKey = String(numericPrefix) + queryKey } const query = _httpBuildQueryHelper(queryKey, value, separator) if (query !== '') { tmp.push(query) } } } else { for (const [key, value] ofObject.entries(formdata)) { if (typeof value === 'undefined') { continue } let queryKey = key if (numericPrefix && !Number.isNaN(Number(queryKey))) { queryKey = String(numericPrefix) + queryKey } const query = _httpBuildQueryHelper(queryKey, value, separator) if (query !== '') { tmp.push(query) } } }
return tmp.join(separator) }
// php/url/rawurlencode (Locutus dependency module) functionrawurlencode(str: string): string { // discuss at: https://locutus.io/php/rawurlencode/ // parity verified: PHP 8.3 // original by: Brett Zamir (https://brett-zamir.me) // input by: travc // input by: Brett Zamir (https://brett-zamir.me) // input by: Michael Grier // input by: Ratheous // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Brett Zamir (https://brett-zamir.me) // bugfixed by: Joris // reimplemented by: Brett Zamir (https://brett-zamir.me) // reimplemented by: Brett Zamir (https://brett-zamir.me) // note 1: This reflects PHP 5.3/6.0+ behavior // note 1: Please be aware that this function expects \ // note 1: to encode into UTF-8 encoded strings, as found on // note 1: pages served as UTF-8 // example 1: rawurlencode('Kevin van Zonneveld!') // returns 1: 'Kevin%20van%20Zonneveld%21' // example 2: rawurlencode('https://kvz.io/') // returns 2: 'https%3A%2F%2Fkvz.io%2F' // example 3: rawurlencode('https://www.google.nl/search?q=Locutus&ie=utf-8') // returns 3: 'https%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3DLocutus%26ie%3Dutf-8'
str = str + ''
// Tilde should be allowed unescaped in future versions of PHP (as reflected below), // but if you want to reflect current // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following. returnencodeURIComponent(str) .replace(/!/g, '%21') .replace(/'/g, '%27') .replace(/\(/g, '%28') .replace(/\)/g, '%29') .replace(/\*/g, '%2A') }
// php/url/urlencode (Locutus dependency module) functionurlencode(str: string): string { // discuss at: https://locutus.io/php/urlencode/ // parity verified: PHP 8.3 // 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: Waldo Malqui Silva (https://fayr.us/waldo/) // input by: AJ // input by: travc // input by: Brett Zamir (https://brett-zamir.me) // input by: Ratheous // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Joris // reimplemented by: Brett Zamir (https://brett-zamir.me) // reimplemented by: Brett Zamir (https://brett-zamir.me) // note 1: This reflects PHP 5.3/6.0+ behavior // note 1: Please be aware that this function // note 1: expects to encode into UTF-8 encoded strings, as found on // note 1: pages served as UTF-8 // example 1: urlencode('Kevin van Zonneveld!') // returns 1: 'Kevin+van+Zonneveld%21' // example 2: urlencode('https://kvz.io/') // returns 2: 'https%3A%2F%2Fkvz.io%2F' // example 3: urlencode('https://www.google.nl/search?q=Locutus&ie=utf-8') // returns 3: 'https%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3DLocutus%26ie%3Dutf-8'
if (Array.isArray(formdata)) { for (let index = 0; index < formdata.length; index += 1) { const value = formdata[index] if (typeof value === 'undefined') { continue } let queryKey = String(index) if (numericPrefix) { queryKey = String(numericPrefix) + queryKey } const query = _httpBuildQueryHelper(queryKey, value, separator) if (query !== '') { tmp.push(query) } } } else { for (const [key, value] ofObject.entries(formdata)) { if (typeof value === 'undefined') { continue } let queryKey = key if (numericPrefix && !Number.isNaN(Number(queryKey))) { queryKey = String(numericPrefix) + queryKey } const query = _httpBuildQueryHelper(queryKey, value, separator) if (query !== '') { tmp.push(query) } } }
return tmp.join(separator) }
// php/url/rawurlencode (Locutus dependency module) functionrawurlencode(str) { // discuss at: https://locutus.io/php/rawurlencode/ // parity verified: PHP 8.3 // original by: Brett Zamir (https://brett-zamir.me) // input by: travc // input by: Brett Zamir (https://brett-zamir.me) // input by: Michael Grier // input by: Ratheous // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Brett Zamir (https://brett-zamir.me) // bugfixed by: Joris // reimplemented by: Brett Zamir (https://brett-zamir.me) // reimplemented by: Brett Zamir (https://brett-zamir.me) // note 1: This reflects PHP 5.3/6.0+ behavior // note 1: Please be aware that this function expects \ // note 1: to encode into UTF-8 encoded strings, as found on // note 1: pages served as UTF-8 // example 1: rawurlencode('Kevin van Zonneveld!') // returns 1: 'Kevin%20van%20Zonneveld%21' // example 2: rawurlencode('https://kvz.io/') // returns 2: 'https%3A%2F%2Fkvz.io%2F' // example 3: rawurlencode('https://www.google.nl/search?q=Locutus&ie=utf-8') // returns 3: 'https%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3DLocutus%26ie%3Dutf-8'
str = str + ''
// Tilde should be allowed unescaped in future versions of PHP (as reflected below), // but if you want to reflect current // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following. returnencodeURIComponent(str) .replace(/!/g, '%21') .replace(/'/g, '%27') .replace(/\(/g, '%28') .replace(/\)/g, '%29') .replace(/\*/g, '%2A') }
// php/url/urlencode (Locutus dependency module) functionurlencode(str) { // discuss at: https://locutus.io/php/urlencode/ // parity verified: PHP 8.3 // 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: Waldo Malqui Silva (https://fayr.us/waldo/) // input by: AJ // input by: travc // input by: Brett Zamir (https://brett-zamir.me) // input by: Ratheous // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Kevin van Zonneveld (https://kvz.io) // bugfixed by: Joris // reimplemented by: Brett Zamir (https://brett-zamir.me) // reimplemented by: Brett Zamir (https://brett-zamir.me) // note 1: This reflects PHP 5.3/6.0+ behavior // note 1: Please be aware that this function // note 1: expects to encode into UTF-8 encoded strings, as found on // note 1: pages served as UTF-8 // example 1: urlencode('Kevin van Zonneveld!') // returns 1: 'Kevin+van+Zonneveld%21' // example 2: urlencode('https://kvz.io/') // returns 2: 'https%3A%2F%2Fkvz.io%2F' // example 3: urlencode('https://www.google.nl/search?q=Locutus&ie=utf-8') // returns 3: 'https%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3DLocutus%26ie%3Dutf-8'
if (Array.isArray(formdata)) { for (let index = 0; index < formdata.length; index += 1) { const value = formdata[index] if (typeof value === 'undefined') { continue } let queryKey = String(index) if (numericPrefix) { queryKey = String(numericPrefix) + queryKey } const query = _httpBuildQueryHelper(queryKey, value, separator) if (query !== '') { tmp.push(query) } } } else { for (const [key, value] ofObject.entries(formdata)) { if (typeof value === 'undefined') { continue } let queryKey = key if (numericPrefix && !Number.isNaN(Number(queryKey))) { queryKey = String(numericPrefix) + queryKey } const query = _httpBuildQueryHelper(queryKey, value, separator) if (query !== '') { tmp.push(query) } } }
return tmp.join(separator) }
Improve this function
Locutus is a community effort following
The McDonald's Theory:
we ship first iterations, hoping others will improve them.
If you see something that could be better, we'd love your contribution.