Acortar direcciones-url extensas con PHP (función)

Quizás haya notado que en algunos foros, los usuarios colocan direcciones web extensas para llevarnos a un contenido específico, algo así:

http://www.google.com/search?hl=en&client=firefox-a&channel=s&rls=org.mozilla%3Aen-US%3Aofficial&hs=BCR&q=metacafe&btnG=Search

Sin embargo, también habrá notado que estos enlaces a veces son reducidos de longitud para evitar que el diseño de la página se vea afectado, algunos partes de la dirección son reemplazado por puntos suspensivos. Esto hace que se vea más presentable.

http://www.google.com/search?h[ ... ]afe&btnG=Search 

Esto lo podemos lograr con PHP y una sencilla pero poderosa función casera. Veamos:

<?php
function acortarurl($url){
    $longitud = strlen($url);
    if($longitud > 45){
        $longitud = $longitud - 30;
        $parte_inicial = substr($url, 0, -$longitud);
        $parte_final = substr($url, -15);
        $nueva_url = $parte_inicial."[ ... ]".$parte_final;
        return $nueva_url;
    }else{
        return $url;
    }
}

$url_larga = "http://www.google.com.pe/search?hl=en&q=ribosomatic&btnG=Google+Search&meta=";
$url_corta = acortarurl($url_larga);
echo"<a href="$url_larga">$url_corta</a>";
?>

Copien y peguen el código anterior y hagan la prueba en su servidor local y verán el resultado.

Comentarios Comentarios formato RSS

  1. avatar André Karell 2009-07-03 22:04:39 5 Disculpa jesús, tu codigo tiene 1 error xD

    echo"<a href="$url_larga">$url_corta</a>";

    seria:

    echo"<a href='".$url_larga."'>".$url_corta."</a>";
  2. avatar juan 2008-07-11 18:20:50 4 Con lo siguiente logro pasar a enlace un texto url de un comentario:
    $textoconenlaces = preg_replace("!(http:\/\/[0-9a-zA-Z\-\._\?\&\=\<)\;\,\#\%\/]*)!e" , "'<a href=\"\\1\" target=\"_blank\">\\1\</a>'", $textoconenlaces);

    Pero cuando aplico la siguiente función para además de linkear una url ingresada como texto quiere acortarla no me funciona:
    <?

    function reducirurl($url, $largo_de_la_url) {

    $url_reducida = substr($url, 0, $largo_de_la_url);
    if (strlen($url) > $largo_de_la_url){ $url_reducida .= '...';}
    return $url_reducida;
    }


    function mostrandourl($textoconenlaces) {
    $textoconenlaces = preg_replace("!(http:\/\/[0-9a-zA-Z\-\._\?\&\=\<)\;\,\#\%\/]*)!e" , "'<a href=\"\\1\" target=\"_blank\">'.reducirurl(\"\\1\",30).'</a>'", $textoconenlaces);
    return $textoconenlaces;
    }

    ?>

    Alguna sugerencia de porqué no funiona ??
  3. avatar jesusvld 2008-07-04 16:23:39 3 Interesante pregunta. Será cuestión de hacer una investigación al respecto.
  4. avatar Carlos Mena 2008-07-04 10:10:40 2 Como lograr direcciones (URL) en PHP no más cortas si no legibles o amigables como las de su sitio, utilizando un servidor IIS?
  5. avatar Lobsang 2008-07-02 15:57:54 1 Algo mejor :D me alegro..

Dejar un comentario