← Back to Blog
2026-03-083 min readby DevUtilz

Query String Parsing and Manipulation

URLQuery StringWeb DevelopmentTutorial

Query String Parsing and Manipulation

Query strings are the part of the URL after ?. They're used for parameters, filtering, and passing data.

URLSearchParams API

const params = new URLSearchParams('page=2&sort=name&order=asc');

console.log(params.get('page'));  // '2'
console.log(params.get('sort'));  // 'name'
console.log(params.has('order')); // true

Building Query Strings

const params = new URLSearchParams();

// Add parameters
params.set('page', '1');
params.set('limit', '20');

// Multiple values (same key)
params.append('tag', 'javascript');
params.append('tag', 'tutorial');

console.log(params.toString());
// page=1&limit=20&tag=javascript&tag=tutorial

Common Operations

Parse from Current URL

// Browser
const params = new URLSearchParams(window.location.search);

// Or in React/Next.js
const { searchParams } = useSearchParams();
const page = searchParams.get('page');

Update Query Parameter

function updateParam(key, value) {
  const params = new URLSearchParams(window.location.search);
  params.set(key, value);
  window.location.search = params.toString();
}

Remove Parameter

const params = new URLSearchParams('page=2&limit=20');
params.delete('limit');
// 'page=2'

Sort Parameters

const params = new URLSearchParams('z=1&a=2&b=3');
params.sort();
// 'a=2&b=3&z=1'

Encoding

const params = new URLSearchParams();

// Special characters are auto-encoded
params.set('search', 'hello world');
console.log(params.toString());
// search=hello+world

// Manual encoding
const encoded = encodeURIComponent('特殊字符');

Array Parameters

// Multiple values for same key
const params = new URLSearchParams();
params.append('tags', 'js');
params.append('tags', 'react');
params.append('tags', 'node');

// Get all values
console.log(params.getAll('tags')); // ['js', 'react', 'node']

// In URL: ?tags=js&tags=react&tags=node

Pagination Example

function buildPagination(baseUrl, currentPage, totalPages) {
  const params = new URLSearchParams();
  params.set('page', currentPage);

  const links = [];

  // Previous
  if (currentPage > 1) {
    params.set('page', currentPage - 1);
    links.push({ url: `${baseUrl}?${params}`, text: 'Previous' });
  }

  // Next
  if (currentPage < totalPages) {
    params.set('page', currentPage + 1);
    links.push({ url: `${baseUrl}?${params}`, text: 'Next' });
  }

  return links;
}

Filtering Example

function buildFilters(filters) {
  const params = new URLSearchParams();

  if (filters.category) {
    params.set('category', filters.category);
  }
  if (filters.minPrice) {
    params.set('minPrice', filters.minPrice);
  }
  if (filters.maxPrice) {
    params.set('maxPrice', filters.maxPrice);
  }
  if (filters.sort) {
    params.set('sort', filters.sort);
  }

  return params.toString();
}

// Usage
const query = buildFilters({
  category: 'electronics',
  minPrice: '100',
  maxPrice: '500',
  sort: 'price'
});
// category=electronics&minPrice=100&maxPrice=500&sort=price

Server-side Parsing

// Node.js
const url = require('url');

const parsed = url.parse('https://example.com?page=2&limit=20', true);
console.log(parsed.query.page); // '2'
console.log(parsed.query.limit); // '20'

// Express.js
app.get('/search', (req, res) => {
  const { q, page, limit } = req.query;
  // Use the parameters
});

Common Mistakes

// Wrong - not encoding special characters
const bad = '?name=John Smith';

// Correct - use URLSearchParams
const params = new URLSearchParams();
params.set('name', 'John Smith');
const good = '?' + params.toString();

Conclusion

Use URLSearchParams for all query string operations. It handles encoding automatically. Keep parameters organized and validate input on the server side.