Skip to content

Instantly share code, notes, and snippets.

@anjan011
Created August 17, 2016 17:44
Show Gist options
  • Save anjan011/71e137b9fb9506c2e01f600e55e9deaa to your computer and use it in GitHub Desktop.
Save anjan011/71e137b9fb9506c2e01f600e55e9deaa to your computer and use it in GitHub Desktop.
php url generator with query string modification
<?php
/**
* Class UrlGenerator
*
* A class to generate url, while adding or removing query string parameters
*/
class UrlGenerator {
/**
* Generates a http url
*
* @param string $baseUrl
* @param array $removeQueryString
* @param array $addQueryString
*
* @return string
*/
public static function generate( $baseUrl = '', $removeQueryString = array(), $addQueryString = array() ) {
$baseUrl = trim( $baseUrl );
if ( $baseUrl == '' ) {
$baseUrl = isset($_SERVER[ 'REQUEST_URI' ]) ? trim( $_SERVER[ 'REQUEST_URI' ] ) : '';
}
if ( $baseUrl != '' ) {
$urlParts = parse_url( $baseUrl );
$queryString = isset($urlParts[ 'query' ]) ? trim( $urlParts[ 'query' ] ) : '';
$queryArray = array();
if ( $queryString != '' ) {
parse_str( $queryString, $queryArray );
}
if ( !empty($queryArray) ) {
# remove the keys
if ( is_array( $removeQueryString ) && !empty($removeQueryString) ) {
foreach ( $removeQueryString as $key ) {
unset($queryArray[ $key ]);
}
}
}
# add new keys
if ( is_array( $addQueryString ) && !empty($addQueryString) ) {
foreach ( $addQueryString as $key => $value ) {
$queryArray[ $key ] = $value;
}
}
# if we have a non empty query array, rebuild the query string
if ( !empty($queryArray) ) {
$urlParts[ 'query' ] = urldecode( http_build_query( $queryArray ) );
}
return self::unParseUrl( $urlParts );
}
return $baseUrl;
}
/**
* Rebuild an URL from it's parsed parts
*
* @param array $urlParts
*
* @return string
*/
public static function unParseUrl( $urlParts = array() ) {
$scheme = isset($urlParts[ 'scheme' ]) ? trim( $urlParts[ 'scheme' ] ) : '';
if ( $scheme ) {
$scheme .= '://';
}
$host = isset($urlParts[ 'host' ]) ? trim( $urlParts[ 'host' ] ) : '';
$port = isset($urlParts[ 'port' ]) ? (int) $urlParts[ 'port' ] : 0;
if ( $port > 0 ) {
$port = ':'.$port;
}
else {
$port = '';
}
$user = isset($urlParts[ 'user' ]) ? trim( $urlParts[ 'user' ] ) : '';
$pass = isset($urlParts[ 'pass' ]) ? trim( $urlParts[ 'pass' ] ) : '';
if ( $user && $pass ) {
$pass = ':'.$pass;
}
$path = isset($urlParts[ 'path' ]) ? trim( $urlParts[ 'path' ] ) : '';
$query = isset($urlParts[ 'query' ]) ? trim( $urlParts[ 'query' ] ) : '';
if ( $query ) {
$query = '?'.$query;
}
$fragment = isset($urlParts[ 'fragment' ]) ? '#'.$urlParts[ 'fragment' ] : '';
return "{$scheme}{$user}{$pass}{$host}{$port}{$path}{$query}{$fragment}";
}
}
# usage
$baseUrl = $_SERVER[ 'REQUEST_URI' ];
$removeKeys = array( 'pageNo' );
$addKeys = array(
'pageNo' => $_GET[ 'pageNo' ],
'is_paging' => '1',
'other' => array( 1, 2, 3 ),
);
$pageUrl = UrlGenerator::generate(
$_SERVER['REQUEST_URI'],
array('_ticketPageNo'),
array(
'_ticketPageNo' => '{%page%}'
)
);
echo $pageUrl;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment