El otro día en el curro, me vi con la necesidad de averiguar todas las urls, imágenes i javascripts con links que la pagina pudiera contener y reemplazarlas por otro tipo de urls.
Para realizarlo, use la expresión: preg_replace_callback
Esta expresión del php lo que hace es, a través de una expresión regular que le marquemos, nos hará un callback a una función que tratará los parametros, lo cual nos es muy útil en este caso, para marcarle que nos detecte los tags de imagenes, links...
Quedaría una cosa así:
-
$textos= preg_replace_callback('#<(?:a|img|embed).*?(?:(?:href|src)\s*=\s*(["\'])(.*?)\1)[^>]*>#si',
-
'find_links_into_text',
-
$texto_bd);
Como vemos , le pasamos primero a preg_replace_callback, la expresión regular que nos detectara las imágenes, links o embebidos, luego le marcamos la función que se encargara de tratar los datos y por ultimo, $texto_bd, con el texto cargado de la bd
Y la función 'find_links_into_text', podría realizar lo siguiente:
-
function find_links_into_text($matches) {
-
-
foreach($variables as $key=>$value) {
-
if ($pos !== FALSE) {
-
$url = $value;break; // Aqui trataremos la url como queramos. En este caso le asigno el valor que le toca (javascript, http://, etc)
-
}
-
}
En la función, creo una array($variables) que contendrá los tipos de url que que quiera detectar o modificar y luego con el foreach voy detectando de que se trata la url que recibo.
El matches, contiene la info de la expresión regular y recojo el segundo valor del array matches ya que el primero me guarda toda la información y no me interesa toda la info.
Seguro que hay mas maneras de realizarlo, pero a mi me funciono muy bien esta.






