es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP reemplaza patrones en una cadena con URLs.

Tengo cientos de archivos html que quiero mostrar en un sitio web. Todos tienen enlaces en el siguiente formato:

[My Test URL|https://www.mywebsite.com/test?param=123]

El problema es que algunos URLs están separados así:

[My Test URL|https://www.mywebsite.c om/test?param=123]

Quiero reemplazar todos esos con el equivalente en HTML, así:

<a href="https://www.mywebsite.com/test?param=123">My Test URL</a>

Sé que con la expresión regular “/[(.*?)]/” puedo coincidir con los corchetes, pero ¿cómo puedo separar por la barra vertical, eliminar los espacios en blanco en la URL y convertir todo en una cadena?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes usar una combinación de expresiones regulares y funciones de manipulación de cadenas en PHP. Aquí tienes un ejemplo de código que debería funcionar:

    <?php
    
    $html_files = /* un array de rutas a tus archivos HTML */;
    $regex = '/\[(.*?)\]/'; // esto coincidirá con [My Test URL|https://www.mywebsite.com/test?param=123]
    
    foreach ($html_files as $file_path) {
        $content = file_get_contents($file_path);
    
        // utiliza preg_replace_callback para reemplazar todas las ocurrencias del enlace
        $content = preg_replace_callback($regex, function($matches) {
            $link_parts = explode('|', $matches[1]); // divide la cadena por el caracter de tubería
            $text = trim($link_parts[0]); // obtiene la parte de texto del enlace y elimina cualquier espacio en blanco al principio o al final
            $url = trim($link_parts[1]); // obtiene la parte de la URL del enlace y elimina cualquier espacio en blanco al principio o al final
            $url = str_replace(' ', '', $url); // elimina cualquier espacio en blanco restante en la URL
    
            // construye el enlace HTML y devuélvelo como reemplazo del enlace original
            return '<a href="' . $url . '">' . $text . '';
        }, $content);
    
        // escribe el contenido modificado de vuelta al archivo HTML
        file_put_contents($file_path, $content);
    }
    
    ?>
    

    Este código recorrerá todos los archivos HTML en el array $html_files, leerá su contenido, usará preg_replace_callback para reemplazar todas las ocurrencias del patrón de enlace, y escribirá el contenido modificado de vuelta al archivo. La función de devolución de llamada divide la cadena del enlace por el caracter de tubería, elimina cualquier espacio en blanco de la URL y construye el enlace HTML utilizando las etiquetas <a> y </a>.

Comments are closed.