[Introducción a PHP] ¡La Magia Reutilizable! Cómo Generar Extractos con Funciones (function)
¿Alguna vez has querido mostrar solo una pequeña parte introductoria de cada artículo en la página de un blog? Un "extracto" que le dice a los lectores "de esto trata el artículo" es muy importante para animarles a navegar por tu sitio. Sin embargo, crear extractos manualmente cada vez que añades un artículo es mucho trabajo, ¿verdad?
Este artículo presenta una herramienta mágica en PHP llamada función (function) que resuelve este problema. Vamos a intentar crear nuestra propia y práctica "herramienta de generación de extractos" como una función de PHP que toma un texto largo, lo corta a un número de caracteres especificado y añade "...leer más" al final. También cubriremos `htmlspecialchars()`, que es esencial para la seguridad, por lo que obtendrás un código seguro y práctico. ¡Incluso los principiantes pueden copiar y pegar!
Para preparar tu entorno para ejecutar PHP (entorno de desarrollo), si aún no has configurado XAMPP, por favor consulta ¡[Introducción a PHP] Guía completa para descargar e instalar XAMPP!. ¡Después de la instalación, simplemente coloca tu archivo PHP en la carpeta especificada (como `htdocs`) y estarás listo!
1. ¿Qué es la Magia Organizadora de Código "Función"?
Primero, ¿qué es una "función"? En pocas palabras, es como una "herramienta personalizada" en la que agrupas un proceso específico, le das un nombre y puedes llamarla para usarla en cualquier momento.
Por ejemplo, si creas una función para la serie de pasos "recibir texto, cortarlo a 100 caracteres y añadir '...' al final", entonces solo necesitas llamar a esa función cada vez que necesites un extracto. No tienes que escribir el mismo código una y otra vez, lo que hace que todo tu código base sea más limpio y fácil de gestionar. Esta es la mayor ventaja de las funciones.
La sintaxis básica es la siguiente:
<?php
function nombre_de_la_funcion(argumento1, argumento2, ...) {
// Escribe aquí el proceso que quieres ejecutar
return valor_de_retorno; // Devuelve el resultado del proceso
}
?>
Es fácil de entender si piensas en los argumentos como los "ingredientes" que pasas a la función, y el valor de retorno como el "producto terminado" que la función te devuelve. Ahora, usemos esta sintaxis para crear nuestra función de generación de extractos.
2. ¡A la práctica! Vamos a crear una función para generar extractos
Esta es la parte principal de este artículo. Crearemos una función llamada `make_excerpt()` a la que puedes darle un texto largo y un número de caracteres, y te devolverá un extracto bien abreviado. El siguiente código es un ejemplo HTML completo que puedes copiar y pegar en un archivo para ver inmediatamente cómo funciona en tu navegador.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Herramienta de Generación de Extractos</title>
<style>
body { font-family: sans-serif; line-height: 1.6; padding: 20px; }
.original-text { background: #f4f7f6; border-left: 5px solid #ccc; padding: 10px; margin-bottom: 20px; }
.excerpt { background: #e8f4f8; border-left: 5px solid #007bff; padding: 10px; }
</style>
</head>
<body>
<h1>Prueba de Generación de Extractos</h1>
<?php
/**
* Genera un extracto.
* @param string $text El texto original.
* @param int $length El límite de caracteres.
* @return string El extracto generado.
*/
function make_excerpt(string $text, int $length): string {
// Comprueba el número de caracteres del texto original
if (mb_strlen($text) > $length) {
// Corta al número de caracteres especificado y añade "...leer más"
return mb_substr($text, 0, $length) . '...leer más';
} else {
// Si el número de caracteres es menor que el límite, lo devuelve tal cual
return $text;
}
}
// Un texto original largo
$long_text = 'Este es un texto muy largo. Este artículo explica en detalle cómo usar funciones de PHP para cortar texto a un número de caracteres específico y generar un extracto. Esta es una técnica práctica útil para las páginas de índice de blogs y más.';
// Llama a la función para generar un extracto de 50 caracteres
$excerpt_text = make_excerpt($long_text, 50);
?>
<h2>Texto Original</h2>
<div class="original-text">
<?php echo $long_text; ?>
</div>
<h2>Extracto Generado (límite de 50 caracteres)</h2>
<div class="excerpt">
<?php echo $excerpt_text; ?>
</div>
</body>
</html>
Los puntos clave en este código son `mb_strlen()` y `mb_substr()`. Para manejar correctamente los caracteres multibyte como el japonés, necesitas usar funciones que empiecen con `mb_` en lugar de `strlen()` o `substr()`. Esto evita texto corrupto y asegura que puedas cortar el texto en el número de caracteres deseado.
3. ¡Importante! Visualización segura con htmlspecialchars
Al mostrar texto en una página web, una cosa que nunca debes olvidar es la seguridad. Si el texto a mostrar contiene etiquetas HTML como `<script>`, mostrarlo tal cual podría causar un comportamiento no deseado (un ataque de Cross-Site Scripting).
Aquí es donde entra la función `htmlspecialchars()`. Esta función convierte los caracteres que tienen un significado especial en HTML (por ejemplo, `<`, `>`, `&`, `"`) en cadenas de texto inofensivas (por ejemplo, `<`, `>`, `&`, `"`).
Mejoremos nuestra función de generación de extractos incorporando este proceso para hacerla más segura.
<?php
/**
* Una función mejorada para generar un extracto seguro.
*/
function make_safe_excerpt(string $text, int $length): string {
// 1. Primero, escapa con htmlspecialchars
$safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
// 2. Realiza la comprobación del número de caracteres y el corte en el texto escapado
if (mb_strlen($safe_text) > $length) {
return mb_substr($safe_text, 0, $length) . '...leer más';
} else {
return $safe_text;
}
}
// Texto que podría contener etiquetas HTML
$dangerous_text = '<strong>Texto enfatizado</strong> y código malicioso como <script>alert("danger!");</script>.';
// Usa la función mejorada para generar un extracto seguro
$safe_excerpt = make_safe_excerpt($dangerous_text, 30);
echo $safe_excerpt;
?>
Al usar esta función `make_safe_excerpt()`, incluso si el texto original contiene etiquetas HTML, se mostrarán de forma segura como meras cadenas de texto, por lo que no tienes que preocuparte de que rompan el diseño de la página o ejecuten scripts.
4. Ejemplo aplicado: Usándolo con un bucle foreach
Ahora, combinemos esta práctica función de generación de extractos con el bucle `foreach` que aprendimos en el artículo anterior. Generaremos dinámicamente una lista de títulos y extractos a partir de un array de entradas de blog.
<?php
// Función de generación de extractos seguros (se asume definida en el ejemplo anterior)
function make_safe_excerpt(string $text, int $length): string {
$safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
if (mb_strlen($safe_text) > $length) {
return mb_substr($safe_text, 0, $length) . '...leer más';
}
return $safe_text;
}
// Array de datos de entradas de blog
$blog_posts = [
[
"title" => "Domina los conceptos básicos de PHP",
"content" => "Este artículo explica la sintaxis básica y las variables de PHP. Está diseñado para aquellos que son nuevos en la programación, así que no dudes en seguir leyendo."
],
[
"title" => "El secreto de las conexiones a bases de datos",
"content" => "Las bases de datos son esenciales para el desarrollo web. Al leer este artículo, entenderás cómo conectarte a una base de datos MySQL desde PHP y recuperar/manipular datos en 5 minutos. Se incluyen muchos códigos de ejemplo."
]
];
?>
<div class="post-list">
<?php foreach ($blog_posts as $post): ?>
<article>
<h3><?php echo htmlspecialchars($post['title']); ?></h3>
<p><?php echo make_safe_excerpt($post['content'], 60); ?></p>
</article>
<?php endforeach; ?>
</div>
Como puedes ver, una función, una vez creada, puede ser llamada y utilizada repetidamente en varias partes de tu sitio, como dentro de bucles. La alta reutilización del código y un mantenimiento más fácil son los mayores atractivos de las funciones.
5. Resumen e introducción a código relacionado
En este artículo, hemos aprendido a usar las "funciones" de PHP para cortar texto a un número de caracteres especificado y generar un extracto seguro. Los beneficios de usar funciones son la organización del código y la mejora de la reutilización. La función `make_safe_excerpt` que hemos creado hoy seguramente será una herramienta útil que te servirá muchas veces en tus proyectos de creación de sitios.
PHP tiene muchas otras funciones útiles para manipular cadenas de texto. Por ejemplo, `mb_strpos()` para buscar una cadena específica, `str_replace()` para realizar reemplazos y `strip_tags()` para eliminar completamente las etiquetas HTML. Al combinar estas funciones, puedes lograr un procesamiento de texto aún más avanzado. Te animamos a que las investigues y las pruebes.