Php . Asp . MySql . Visual Basic . VideoTutoriales . Códigos . Descargas . Foro

Cesarcancino.com

VideoTutoriales, códigos y algo más.....

"Escucho con atencion a la gente que tiene la razón y prefiero seguir a los que tienen los resultados. "


Taller PHP
Dic
30

Valida y detecta urls con PHP

Viernes 31 de Diciembre de 2010
Publicado por César Cancino


Nuestro amigo zherhatul ha compartido un excelente script hecho en php, que nos permite recorrer una cadena, buscar determinadas palabras y convertirnas en links. En mi humilde opinión puede ser muy útil para hacer sistemas de trackeo, como por ejemplo lo que realiza infolink.com.


A continuación les muestro el código básico con el que trabajaremos:


<?php

/*************************************funcion cambia a link**********************************************************************/

function validar_url($url){//valida la url con protocolo o sin

if(substr($url,strlen($url)-1,strlen($url)-1)=='.'){//comprueba si la palabra termina con punto o en una coma si un link termina en punto o coma no sera valido
$agregado='.';
$url=substr($url,0,strlen($url)-1); //aqui son quitados los puntos y comas finales para verificar si la palabra es una direcion web
}elseif(substr($url,strlen($url)-1,strlen($url)-1)==','){
$agregado=','; //son guardos (la coma o el punto) para luego ser agregados al string
$url=substr($url,0,strlen($url)-1);
}else{
$agregado='$'; //indica que no se encontraron puntos y comas al final de la palabra
}

 

//TIPO DE CONEXIÓN

$urlregex = "^(https?|ftp)\:\/\/";// valida los protocolos http | https | ftp

//USUARIO Y CONTRASEÑA (opcional)

$urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";

//EL NOMBRE DE LA WEB O LA IP

//$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*"; // http://x = allowed (ejemplo. http://localhost, http://routerlogin)

$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)+"; // http://x.x = minimum //acepta como minimo un dominio

//$urlregex .= "([a-z0-9+\$_-]+\.)*[a-z0-9+\$_-]{2,3}"; // http://x.xx(x) = minimum

//PUERTO (opcional)

$urlregex .= "(\:[0-9]{2,5})?";

//RUTA (opcional)

$urlregex .= "(\/([a-z0-9+\$_-~]\.?)+)*\/?";// la ruta de acceso al recurso tambien se puede modificar para que acepte mas caracteres especiales como cualquier directorio

//GET de la ruta (opcional)

$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";// paso de variables por metodo get

//ANCLA de la ruta (opcional)

$urlregex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$";// ancla <a href

//COMPROBAMOS

if(eregi($urlregex, $url)){ //aqui se comprueba si la exprecion anterior se cumple - valida la url con protocolo
return 'conprotocolo'.$agregado; // se retorna si es validala url mas el agregado si tiene (punto y coma)al final
}else{ //sino validamos que sea sin protocolo

$urlregex2 .= "^w{3}"; // valida las www al comienzo de la url
$urlregex2 .= "(\.[a-z0-9+\$_-]+)+"; //------------------------------
$urlregex2 .= "(\:[0-9]{2,5})?";
$urlregex2 .= "(\/([a-z0-9+\$_-~]\.?)+)*\/?"; //esto ya esta explicado
$urlregex2 .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";
$urlregex2 .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$";//-----------------------
if(eregi($urlregex2, $url)){//aqui se comprueba si la exprecion anterior se cumple - valida la url con sin protocolo
return 'sinprotocolo'.$agregado; // se retorna si es validala url mas el agregado si tiene (punto y coma)al final
}else{
return 'false'; // si no es una url devuelve falso
}

}
}
/*************************************Cierra funcion cambia a link**********************************************************************/

/************************************************Funcion cambiar palabra a Link*******************************************************************************************/
function cambiaALink($text){ //Esta funcion separa y evalua cada palabra en el texto para identificar la url son separadas por espacios y saltos de linea

$text=ereg_replace("\n",chr(13).chr(10),$text); //no podia dividir el texto por saltos de linea con '\n' asi que los converti a 'chr(13).chr(10)' que es lo mismo

$arrayBuscaLink = explode(' ',$text);// separa las palabras por espacios en un array

//echo count($arrayBuscaLink);

for ($i=0; $i<count($arrayBuscaLink); $i++) {//bucle principal que recorre el texto buscando urls

$arrayBuscaLink2 = $arrayBuscaLink[$i]; // se asigna el valor del registro actual a una variable
$cantidadCaracteresArrayBuscaLink2=strlen($arrayBuscaLink2);// contiene la cantidad de palabras resultantes en el texto
$textAEval= validar_url($arrayBuscaLink2); // se asigna el valor resultante de la funcion validaurl a una variable

if(substr($textAEval,0,12)=='conprotocolo'){// se compara si el resultado es una url con protocolo incluido

if(substr($textAEval,12,12)== '$'){ //el signo '$' indica nadamas que la url no termina en un punto o coma
$arrayBuscaLink[$i]= '[a] href="'.$arrayBuscaLink2.'"[]]'.$arrayBuscaLink2.'[/a]'; //si es una url con protocolo y sin punto o coma se asigna a la palabra actual este valor
}else{ //si posee una coma o un punto se crea el link y luego se agrega la coma o punto
$arrayBuscaLink[$i]= '[a] href="'.substr($arrayBuscaLink2,0,$cantidadCaracteresArrayBuscaLink2-1).'"[]]'.substr($arrayBuscaLink2,0,$cantidadCaracteresArrayBuscaLink2-1).'[/a]'.substr($textAEval,12,12);
}

}elseif(substr($textAEval,0,12)=='sinprotocolo'){// se compara si el resultado es una url sin protocolo incluido

if(substr($textAEval,12,12)== '$'){//el signo '$' indica nadamas que la url no termina en un punto o coma
$arrayBuscaLink[$i]= '[a] href="http://'.$arrayBuscaLink2.'"[]]'.$arrayBuscaLink2.'[/a]'; //si es una url con protocolo y sin punto o coma se asigna a la palabra actual este valor
}else{ //si posee una coma o un punto se crea el link y luego se agrega la coma o punto

$arrayBuscaLink[$i]= '[a] href="http://'.substr($arrayBuscaLink2,0,$cantidadCaracteresArrayBuscaLink2-1).'"[]]'.substr($arrayBuscaLink2,0,$cantidadCaracteresArrayBuscaLink2-1).'[/a]'.substr($textAEval,12,12);
}
}else{//sino se cumple lo anterior se deja la palabra tal cual

$arrayBuscaLink[$i]=$arrayBuscaLink2; //esto se puede omitir ya que '$arrayBuscaLink[$i]' conserva su valor pero se ve bonito
}

$arrayBuscaLink3 = explode(chr(13).chr(10),$arrayBuscaLink[$i]);// crea un array con las palabras que no fueron cortadas por los espacios
//Ej: zherhatul.net23.netchr(13).chr(10)xxxxxxxxxxx
// chr(13).chr(10) es igual a un salto de linea.

$arrayBuscaLink[$i]=''; //inicializa el valor de la palabra actual

for ($f=0; $f<count($arrayBuscaLink3); $f++) { //bucle que permite recorrer el nuevo array con las palabras separadas por saltos de linea

$arrayBuscaLink4 = $arrayBuscaLink3[$f]; //se asigna el registro actual a una variable para poder trabajar con el valor

$cantidadCaracteresArrayBuscaLink3=strlen($arrayBuscaLink4);// contiene la cantidad de palabras resultantes en el texto

$textAEval2= validar_url($arrayBuscaLink4); // se asigna el valor resultante de la funcion validaurl a una variable

if(substr($textAEval2,0,12)=='conprotocolo'){//-----------------------------------------------------------------------------------------------------------------

if(substr($textAEval2,12,12)== '$'){
$arrayBuscaLink3[$f]= '[a] href="'.$arrayBuscaLink4.'"[]]'.$arrayBuscaLink4.'[/a]';
}else{
$arrayBuscaLink3[$f]= '[a] href="'.substr($arrayBuscaLink4,0,$cantidadCaracteresArrayBuscaLink3-1).'"[]]'.substr($arrayBuscaLink4,0,$cantidadCaracteresArrayBuscaLink3-1).'[/a]'.substr($textAEval2,12,12);
}

}elseif(substr($textAEval2,0,12)=='sinprotocolo'){ //ESTO YA ESTA EXPLICADO

if(substr($textAEval2,12,12)== '$'){
$arrayBuscaLink3[$f]= '[a] href="http://'.$arrayBuscaLink4.'"[]]'.$arrayBuscaLink4.'[/a]';
}else{

$arrayBuscaLink3[$f]= '[a] href="http://'.substr($arrayBuscaLink4,0,$cantidadCaracteresArrayBuscaLink3-1).'"[]]'.substr($arrayBuscaLink4,0,$cantidadCaracteresArrayBuscaLink3-1).'[/a]'.substr($textAEval2,12,12);
}
}else{

$arrayBuscaLink3[$f]=$arrayBuscaLink4;
}//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

if(($f+1)<count($arrayBuscaLink3)){

$arrayBuscaLink[$i].=$arrayBuscaLink3[$f].chr(13).chr(10); //Son agregados los saltos de linea

}else{
$arrayBuscaLink[$i].=$arrayBuscaLink3[$f]; //sino se deja la palabra tal cual
}

}

$text2.=$arrayBuscaLink[$i]." ";// se agrega la palabra o link y los espacios

}
return $text2; // se retorna el resultado
}
/************************************************Cierre Funcion cambiar palabra a Link*******************************************************************************************/

/****************************Funcion para cambiar caracteres**************************************************/
function devuelveAHref($texto){ //Esta funcion cambia los caracteres modificados para evitar injeccion de codigo
$cambia=array('[a]'=> '<a','[]]'=> '>','[/a]'=> '</a>',);
$resultado=strtr( $texto , $cambia);
return $resultado;
}
/****************************Cierre Funcion para cambiar caracteres**************************************************/

//Ejemplo de uso

$texto="xxxx xxxxx www.zherhatul.net23.net/usuarios/zherhatul/zherhatul.php, ssss sssss ssss http://zherhatul.net23.net/usuarios/zherhatul/zherhatul.php.";

echo devuelveAHref(cambiaALink($texto));

?>




DEMO








Hay 1 comentarios.

  1. Kapry desde Argentina Dice:

    Muy interesante este código Muchas gracias por compartirlo :) saludos

Categorías

PHP y MySQL trabajados con programación estructurada

PHP y MySQL

PHP y MySQL trabajados con programación estructurada

PHP y MySQL trabajados con programación orientada a objetos

PHP Orientado a Objetos

PHP y MySQL trabajados con programación orientada a objetos

Videotutoriales sobre ASP y SQL Server

ASP

Videotutoriales sobre ASP y SQL Server

Videotutoriales de Visual Basic .net

Visual Basic .NET

Videotutoriales de Visual Basic .net

VideoTutoriales de Jquery, la excelent librería de javascript

Jquery

VideoTutoriales de Jquery, la excelent librería de javascript

Script y VideoTutoriales sobre Javascript

Javascript

Script y VideoTutoriales sobre Javascript

Script y VideoTutoriales sobre Maquetación HTML y CSS

HTML Y CSS

Script y VideoTutoriales sobre Maquetación HTML y CSS

Videotutoriales sobre programación de mircrocontroladores PIC

Programación de PIC

Videotutoriales sobre programación de mircrocontroladores PIC

Charlas, Conferencias y Talleres online sobre temas Web.

Charlas, Conferencias y Talleres

Charlas, Conferencias y Talleres online sobre temas Web.

Videotutoriales sobre Adobe Flash Professional

Adobe Flash Professional

Videotutoriales sobre Adobe Flash Professional

VideoTutoriales sobre el Framework Codeigniter

Codeigniter

VideoTutoriales sobre el Framework Codeigniter

Acá se irán publicando todos los videos con los que los alumnos han ido participando en los distintos concursos que hemos desarrollado.

Concursos

Acá se irán publicando todos los videos con los que los alumnos han ido participando en los distintos concursos que hemos desarrollado.

Información y Videotutoriales sobre Seguridad informática

Seguridad

Información y Videotutoriales sobre Seguridad informática

VideoTutoriales sobre Adobe Dreamweaver

Dreamweaver

VideoTutoriales sobre Adobe Dreamweaver

Videotutoriales sobre Search Engine Optimization SEO

SEO

Videotutoriales sobre Search Engine Optimization SEO

VideoTutoriales sobre Modelado Vehículo en Blender

Blender

VideoTutoriales sobre Modelado Vehículo en Blender

Videotutoriales sobre el Lenguaje de programación Python

Python

Videotutoriales sobre el Lenguaje de programación Python

VideoTutoriales y Ejemplos sobre el trabajo con el Framework CakePHP

CakePHP

VideoTutoriales y Ejemplos sobre el trabajo con el Framework CakePHP

VideoTutoriales sobre el lenguaje de programación Java

Java

VideoTutoriales sobre el lenguaje de programación Java

VideoTutoriales sobre ASP.NET, trabajados con Visual Studio y C#.

ASP.NET

VideoTutoriales sobre ASP.NET, trabajados con Visual Studio y C#.

VideoTutoriales sobre Programación de Móbiles en Android.

Android

VideoTutoriales sobre Programación de Móbiles en Android.

VideoTutoriales del Gestor de Bases de Dato MySQL

Mysql

VideoTutoriales del Gestor de Bases de Dato MySQL

Preguntas que nos permiten ir conociendo a los alumnos del sitio, y saber de sus gustos, tendencias, gustos y opiniones.

Pregunta de la Semana

Preguntas que nos permiten ir conociendo a los alumnos del sitio, y saber de sus gustos, tendencias, gustos y opiniones.

VideoTutoriales sobre el Lenguaje de Programación PERL

Perl

VideoTutoriales sobre el Lenguaje de Programación PERL

VideoTutoriales sobre el CMS Joomla

Joomla

VideoTutoriales sobre el CMS Joomla

VideoTutoriales sobre MatLab ( MATrix LABoratory )

MatLab

VideoTutoriales sobre MatLab ( MATrix LABoratory )

VideoTutoriales sobre temas relacionados con lógica de Programación

Lógica de Programación

VideoTutoriales sobre temas relacionados con lógica de Programación

VideoTutoriales sobre el trabajo con Action Script

Action Script

VideoTutoriales sobre el trabajo con Action Script

VideoTutoriales sobre el Trabajo con el CMS Open Source Drupal

Drupal

VideoTutoriales sobre el Trabajo con el CMS Open Source Drupal

VideoTutoriales sobre el sistema de mensajerí Open Source OpenFire

OpenFire

VideoTutoriales sobre el sistema de mensajerí Open Source OpenFire

VideoTutoriales sobre la Api de facebook

Api de Facebook

VideoTutoriales sobre la Api de facebook

VideoTutoriales sobre el Lenguaje Delphi

Delphi

VideoTutoriales sobre el Lenguaje Delphi

VideoTutoriales sobre Cinema 4D

Cinema 4D

VideoTutoriales sobre Cinema 4D

VideoTutoriales sobre Macromedia Freehand

Freehand

VideoTutoriales sobre Macromedia Freehand

Noticias y/o artículos de interés relacionados con la web en general y el desarrollo

Noticias

Noticias y/o artículos de interés relacionados con la web en general y el desarrollo

VideoTutoriales sobre el CMS WordPress

WordPress

VideoTutoriales sobre el CMS WordPress

VideoTutoriales sobre Open Office

Open Office

VideoTutoriales sobre Open Office

VideoTutoriales sobre el Sistema Opertivo Linux

Linux

VideoTutoriales sobre el Sistema Opertivo Linux

Acá se muestran los saludos y/ o comentarios de los alumnos de esta comunidad.

Saludos

Acá se muestran los saludos y/ o comentarios de los alumnos de esta comunidad.

Acá veremos temas avanzados cómo MVC, seguridad, etc etc.

Taller Práctico de PHP y MySQL

Acá veremos temas avanzados cómo MVC, seguridad, etc etc.

VideoTutoriales sobre el Framework Ruby on Rails

Ruby on Rails

VideoTutoriales sobre el Framework Ruby on Rails

VideoTutoriales y Contenidos sobre HTML 5

HTML 5

VideoTutoriales y Contenidos sobre HTML 5

VideoTutoriales sobre el CMS Umbraco realizado en ambiente .NET

Umbraco CMS

VideoTutoriales sobre el CMS Umbraco realizado en ambiente .NET

VideoTutoriales sobre LibreOffice y sus herramientas Writer, Calc, impress, draw, Base y Math.

Libre Office

VideoTutoriales sobre LibreOffice y sus herramientas Writer, Calc, impress, draw, Base y Math.

Acá podrás ir viendo los videos de las clases de Capa8.TV

Capa8.TV

Acá podrás ir viendo los videos de las clases de Capa8.TV

VideoTutoriales sobre las herramientas de Google

Google

VideoTutoriales sobre las herramientas de Google

VideoTutoriales sobre Telemática y Redes de computadoras

Telemática

VideoTutoriales sobre Telemática y Redes de computadoras