Añadir enlaces a texto en PHP 5.3

Con la última actualización de PHP (5.3), se han añadido muchos cambios en las funciones y se han marcado como DEPRECATED algunas de ellas. Una de las funciones modificadas es eregi_replace, que -entre otras cosas- estábamos utilizando en una función que recorría un texto, buscando cadenas con URLs para sustituirlas por el html para hacer clicables dichas URLs.

La función era esta:

/**
* transforma un texto para añadirle los links
* @param string $txt texto a tratar
* @return string $result texto tratado
*/
public function setLinks($txt) {
 
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&amp;//=]+)', '<a rel="external" href="\\1">\\1</a>', $txt);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&amp;//=]+)', '\\1<a rel="external" href="http://\\2">\\2</a>', $text);
$text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', '<a rel="external" href="mailto:\\1">\\1</a>', $text);
 
return $text;
}

En la documentación de PHP nos comunican que la versión que sustituye esta es preg_replace, que tiene una sintaxis parecida pero no idéntica. Para hacerla equivalente, tenemos que anidar entre ` (acentos) la expresión regular y usar los modificadores de mayúsculas/minúsculas al final, quedando así:

/**
* transforma un texto para añadirle los links
* @param string $txt texto a tratar
* @return string $result texto tratado
*/
public function setLinks($txt) {
 
$text = preg_replace('`(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&amp;//=]+)`i', '<a rel="external" href="\\1">\\1</a>', $txt);
$text = preg_replace('`([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&amp;//=]+)`i', '\\1<a rel="external" href="http://\\2">\\2</a>', $text);
$text = preg_replace('`([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})`i', '<a rel="external" href="mailto:\\1">\\1</a>', $text);
 
return $text;
}

Deja tu comentario

Tu correo nunca será compartido. Los campos marcados con * son obligatorios

*
*