Helper Url.
Funciones para manipular URLs

Code Helper

Helpers – Url – Manipulación de URls

Las URLs es la dirección o link con que navegamos entre páginas y consta de diferentes partes y datos. Esta librería facilita la gestión de las partes de las urls así como obtener los parámetros y datos de tuviese.

/**
 * HelperUrl.php
 * @author      Code Develium
 */

namespace Helpers;

/**
 * Class HelperUrl
 */
abstract class HelpUrl
{
    /**
     * Devuevle la url actual
     * @return string
     */
    public static function getUrlActual()
    {
        $dominio = HelpServer::getDominioHttp();
        $archivo = HelpServer::getValue('SCRIPT_NAME');
        $qs      = HelpServer::getQueryString();
        if (empty($qs)) {
            return $dominio.$archivo;
        } else {
            return $dominio.$archivo.'?'.$qs;
        }
    }

    /**
     * Devuelve el query string de la url
     *
     * @param string $url
     *
     * @return string
     */
    public static function getQueryString($url)
    {
        $ret = strpos($url, '?');
        if (false === $ret) {
            return null;
        }
        return substr($url, ($ret + 1), strlen($url));
    }

    /**
     * Devuelve el contenido de la página de la url
     *
     * @param string $httpUrl
     *
     * @return string
     */
    public static function getPageContent($httpUrl)
    {
        $file = fopen($httpUrl, "r");
        $line = '';
        if ($file) {
            while (!feof($file)) {
                $line .= fread($file, 1024 * 50);
            }
            return $line;
        }
        return false;
    }

    /**
     * RDevuelve el nombre del host de una url
     * Ex: "http://www.php.net/index.html" => www.php.net
     *
     * @param string $url
     *
     * @return string
     */
    public static function getHost($url)
    {
        $matches = [];
        preg_match("/^(http|https|ftp|ftps|sftp:\/\/)?([^\/]+)/i",
                   $url, 
                   $matches);
        return $matches[ 2 ];
    }

    /**
     * Devuelve un array con los parametros y valores o null si no hay 
     * valores
     *
     * @param string $url
     *
     * @return array
     */
    public static function getArrayParams($url)
    {
        if (false === strpos($url, '&')) {
            // No hay parámetros
            return null;
        }

        $q = self::getQueryString($url);
        $t = [];
        $a = explode('&', $q);
        foreach ($a as $key => $value) {
            $b = explode('=', $a[ $key ]);

            $t[ $b[ 0 ] ] = $b[ 1 ];
        }
        return $t;
    }

    /**
     * Codifica una url a carcters % tots els caracters no alfanumrics
     * Ex:    'http://www.php.es/par word/any?no=true&si=23'
     *        'http%3A%2F%2Fwww.php.es%2Fpar%20word%2Fany%3Fno%3Dtrue%26si%3D23'
     *
     * @param string $url
     *
     * @return string
     */
    public static function encode($url)
    {
        return urlencode($url);
    }

    /**
     * Decodifica una url amb carcters % a caracters no alfanumrics
     * Ex:    'http%3A%2F%2Fwww.php.es%2Fpar%20word%2Fany%3Fno%3Dtrue%26si%3D23'
     *         'http://www.php.es/par word/any?no=true&si=23'
     *
     * @param string $urlEncoded
     *
     * @return string
     */
    public static function decode($urlEncoded)
    {
        return urldecode($urlEncoded);
    }

    /**
     * Añade un parámetro que es un numero aleatorio.
     * Se usa para que cada url sea diferente
     *
     * @param string $url
     * @param int    $lenRandom
     *
     * @return string
     */
    public static function addRandom($url, $lenRandom = 4)
    {
        $sep = '&';
        if (false === strpos($url, '?')) {
            $sep = '?';
        }
        $url .= $sep. "rnd=" . HelpString::createRandom($lenRandom);
        return $url;
    }
    /**
     * Devuelve una nueva url con un parrámetro/valor añadido
     *
     * @param $url
     * @param $parametro
     * @param $valor
     *
     * @return string
     */
    public static function addParam($url, $parametro, $valor)
    {
        $sep = '&';
        if ( false === strpos($url, '?')) {
            $sep = '?';
        }
        $url .= $sep.$parametro.'='.$valor;
        return $url;
    }
}