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@:%_\+.~#?&//=]+)', '<a rel="external" href="\\1">\\1</a>', $txt); $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\\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@:%_\+.~#?&//=]+)`i', '<a rel="external" href="\\1">\\1</a>', $txt); $text = preg_replace('`([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)`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; }