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;
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