Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/03/2011, 13:29
naxoaravena
 
Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Expresion regular para una direccion de una imagen.

Estimados,
Anduve buscando y buscando expresiones regulares... finalmente me decidí a aprender
así que aquí dejo el código que desarrollé.
Aclaro que las 2 primeras funciones las saqué de php.net

Este código extrae las etiquetas img de la cadena $post y obtiene los atributos src, width y height, los últimos 2 atributos los obtiene de la etiqueta o en caso de que no hayan sido establecidos los obtiene del src a través de getimagesize().
Básicamente, el código limita el ancho de las imágenes en $post a $ancho_maximo_img, manteniendo las proporciones del html original.

function removeEvilTags($source){
$allowedTags = '<b><strong><i><big><small><a><ul><li><pre><strike ><u><center><img>';
$source = strip_tags($source, $allowedTags);
return preg_replace('{<(.*?)>}ie', "'<'.removeEvilAttributes('\\1').'>'", $source);
}

function removeEvilAttributes($tagSource){
$stripAttrib = 'javascript:|onclick|ondblclick|onmousedown|onmous eup|onmouseover|onmousemove|onmouseout|onkeypress| onkeydown|onkeyup';
return stripslashes(preg_replace("/$stripAttrib/i", 'forbidden', $tagSource));
}

function procesarPOST($post, $ancho_maximo_img){
$cuerpo_limpio = removeEvilTags($post);
//TRATAMIENTO DE IMÁGENES
//desmantelo el cuerpo entre etiquetas img
$coincidencias = preg_match_all('{<img\s+.*src=".*"\s+.*.*>}i',$cue rpo_limpio,$imagen_tmp,PREG_SET_ORDER);
$cuerpo_noimg = preg_split('{<img\s+.*src=".*"\s+.*>}i',$cuerpo_li mpio);
//desmantelo cada etiqueta img para obtener los parametros src, height y width
for($ii=0;$ii<count($imagen_tmp);$ii++){
$coincidencias = preg_match_all('{(?<=src=")(.*?)(?=")}i',$imagen_t mp[$ii][0],$aux,PREG_SET_ORDER);
$imagen[$ii]['src'] = $aux[0][0];
unset($aux);
if($coincidencias = preg_match_all('{(?<=width=")(.*?)(?=")}i',$imagen _tmp[$ii][0],$aux,PREG_SET_ORDER)){
$imagen[$ii]['ancho'] = intval($aux[0][0]);
unset($aux);
}
if($coincidencias = preg_match_all('{(?<=height=")(.*?)(?=")}i',$image n_tmp[$ii][0],$aux,PREG_SET_ORDER)){
$imagen[$ii]['alto'] = intval($aux[0][0]);
unset($aux);
}
list($imagen[$ii]['ancho_real'],$imagen[$ii]['alto_real']) = getimagesize($imagen[$ii]['src']);
}
//reescribo la etiqueta img, redimensionando cuando sea necesario
for($ii=0;$ii<count($imagen);$ii++){
if(isset($imagen[$ii]['ancho']) & !isset($imagen[$ii]['alto'])){
$imagen[$ii]['alto'] = round(($imagen[$ii]['alto_real'] / $imagen[$ii]['ancho_real']) * $imagen[$ii]['ancho']);
}
elseif(!isset($imagen[$ii]['ancho']) & isset($imagen[$ii]['alto'])){
$imagen[$ii]['ancho'] = round(($imagen[$ii]['ancho_real'] / $imagen[$ii]['alto_real']) * $imagen[$ii]['alto']);
}
elseif(!isset($imagen[$ii]['ancho']) & !isset($imagen[$ii]['alto'])){
$imagen[$ii]['alto'] = $imagen[$ii]['alto_real'];
$imagen[$ii]['ancho'] = $imagen[$ii]['ancho_real'];
}
if($imagen[$ii]['ancho'] > $ancho_maximo_img){
$razon = $ancho_maximo_img / $imagen[$ii]['ancho'];
$imagen[$ii]['ancho_nuevo'] = floor($imagen[$ii]['ancho'] * $razon);
$imagen[$ii]['alto_nuevo'] = floor($imagen[$ii]['alto'] * $razon);
}
else{
$imagen[$ii]['ancho_nuevo'] = $imagen[$ii]['ancho'];
$imagen[$ii]['alto_nuevo'] = $imagen[$ii]['alto'];
}
$img_etiqueta[$ii] = '<img src="'.$imagen[$ii]['src'].'" width="'.$imagen[$ii]['ancho_nuevo'].'" height="'.$imagen[$ii]['alto_nuevo'].'" >';
}
unset($cuerpo_limpio, $imagen_tmp, $imagen);
//rescribo el cuerpo del tema
$cuerpo_procesado = '';
for($ii=0;$ii<count($img_etiqueta);$ii++){
$cuerpo_procesado = $cuerpo_procesado.$cuerpo_noimg[$ii].$img_etiqueta[$ii];
}
return nl2br($cuerpo_procesado.$cuerpo_noimg[$ii]);
}

saludos