Hola chicos, hace unos días vine con una duda sobre como podía extraer etiquetas de un string, y gracias a pateketrueke pude resolverlo
.
Ahora me encuentro con un problema derivado del primero, y es como extraer los valores de una etiqueta que contiene a otra usando el mismo método.
El código que empleo es el siguiente:
Código PHP:
function procesar_tags($matches) {
// identifico las etiquetas y sus respectivos valores
list(, $tagName, $tagValue) = $matches;
// dependiendo de la etiqueta que encuentre, hago una cosa u otra
if($tagName == "imagen"){
$argumentos = explode(",", $tagValue);
$id = $argumentos[0];
$dimensiones = $argumentos[1];
$alineado = $argumentos[2];
$ampliacion = $argumentos[3];
if(empty($id)) {$id = 0;}
global $conexion;
$resultado = mysqli_query($conexion, "select * from imagenes where id=$id") or die(mysqli_error());
$contenido = mysqli_fetch_array($resultado);
$urlimagen = $contenido['url'];
$coincidencias=mysqli_num_rows($resultado);
if($coincidencias!=0){
if($alineado == "centro") {
$estilo = "display:block; margin:auto;";
} elseif($alineado == "derecha") {
$estilo = "float:right;";
} else {
$estilo = "float:left;";
}
if ($dimensiones == "reducido") {
$ruta = "./imagenes/mini/mini-";
} else {
$ruta = "./imagenes/";
}
if($ampliacion == "ampliable"){
$resultado = "<a href='./imagenes/$urlimagen' rel='lightbox'><img class='imagenes' style='$estilo' src='$ruta$urlimagen'></a>";
} else {
$resultado = "<img class='imagenes' style='$estilo' src='$ruta$urlimagen'>";
}
$salida=$resultado;
} else { $salida="<span class='textoerror'>La imagen especificada no se existe, por favor, corrige el error</span>"; }
} elseif ($tagName == "enlace") {
$argumentos = explode(",", $tagValue);
$url = $argumentos[0];
if(strpos($url, "http://") !== false || strpos($url, "https://") !== false){ }
else { $url = "http://".$url; }
$nombre = $argumentos[1];
if (empty($url)){
$salida = "<strong>Falta la dirección del enlace</strong>";
} elseif(empty($nombre) && !empty($url)){
$salida = "<a href='$url' target='_blank'>$url</a>";
} else {
$salida = "<a href='$url' target='_blank'>$nombre</a>";
}
} else {
$salida = "<strong>Comando desconocido</strong>";
}
return $salida;
}
// Patrón de la expresión regular
$regex = '/\[(\w+)\]([^[\]]+?)\[\/\\1\]/s';
// Texto donde buscar las etiquetas
$entrada = 'El enlace es la siguiente imagen: [enlace]www.google.es,[imagen]80,reducido,centro,aumentar[/imagen][/enlace]';
$salida = preg_replace_callback($regex, 'procesar_tags', $entrada);
echo $salida;
El problema seguramente esté en el patrón que utilizo (que es el mismo que me dijo pateketrueke) en el problema anterior, pero no sé como modificarlo correctamente para que una etiqueta ignore otras etiquetas que estén dentro como en el caso que expongo más arriba.
Lo que consigo con este código, es que se muestre la imagen, pero en vez de convertirse en un enlace, las etiquetas de [enlace] se muestran tal como están escribas (las etiquetas [enlace][/enlace] funcionan correctamente si no se incluye una etiqueta dentro).
Este problema lo podría solucionar fácilmente si introduzco una palabra clave en el último parámetro de la etiqueta [enlace] para que mostrara una imagen, pero estoy empeñado en conseguir que funcione de esta manera, sobre todo porque a la persona que lo va administrar le sería mucho más fácil hacerlo de esta manera.
Un saludo y muchas gracias