Skip to content
← Back to Snippets
Code

URL Encode and Decode

Encodes a route segment with rawurlencode(), decodes it safely, and builds a query string with http_build_query().

Purpose

Encodes a route segment with rawurlencode(), decodes it safely, and builds a query string with http_build_query().

Snippet details

ContextUtilityLevelProductionCopy-and-paste statusMarked safe after review.

Categories

  • Forms and Validation

Code

<?php

/*
 * Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
 * Free for personal and internal use. Paid project use requires visible credit
 * to Jeffery L. Paris. Corporate use requires a paid license fee unless a
 * separate written license states otherwise.
 */

/**
 * URL Encode and Decode.
 *
 * Purpose:
 * Demonstrates URL-safe encoding for path segments and query parameters using
 * rawurlencode(), rawurldecode(), and http_build_query().
 *
 * @param string $route_segment Value that will appear inside a URL path.
 * @param array $query_values Query-string values to append to a URL.
 * @return array Encoded segment, decoded segment, and query string.
 */
function ogSnippetUrlEncodeDecode(string $route_segment, array $query_values = array()): array {
	$route_segment = trim($route_segment);

	if ($route_segment === '') {
		return array(
			'success' => false,
			'encoded_segment' => '',
			'decoded_segment' => '',
			'query_string' => '',
			'message' => 'A route segment is required.'
		);
	}

	$encoded_segment = rawurlencode($route_segment);
	$decoded_segment = rawurldecode($encoded_segment);
	$query_string = '';

	if (count($query_values) > 0) {
		$query_string = http_build_query($query_values, '', '&', PHP_QUERY_RFC3986);
	}

	return array(
		'success' => true,
		'encoded_segment' => $encoded_segment,
		'decoded_segment' => $decoded_segment,
		'query_string' => $query_string,
		'message' => 'URL encoding completed.'
	);
}

/*
$result = ogSnippetUrlEncodeDecode('Abydos gate address / alpha site', array('unit' => 'SG-1', 'status' => 'dial ready'));
print_r($result);
*/