1
<?php
// Catálogo de productos o cursos
$catalogo = [
'Aprende PHP 8.3 desde cero',
'Domina C++ [v2.0] para videojuegos',
'Desarrollo Web Fullstack con React',
'Guía de precios: $100.00 a $500.00 USD'
];
// Término de búsqueda introducido por un usuario (contiene metacaracteres: +, [, ], .)
$terminoUsuario = "C++ [v2.0]";
echo "<div style='font-family:system-ui; max-width:620px; padding:15px;'>";
echo "<h3 style='color:#0f172a; margin-top:0;'>🔍 Búsqueda Segura con preg_quote()</h3>";
echo "<p style='color:#64748b; font-size:13px;'>Término introducido por el usuario: <code>" . htmlspecialchars($terminoUsuario) . "</code></p>";
// 1. Demostración del escape automático
$terminoEscapado = preg_quote($terminoUsuario, '/');
echo "<div style='background:#f1f5f9; padding:10px 14px; border-radius:6px; font-family:monospace; margin-bottom:15px; font-size:13px;'>";
echo " <strong>Cadena escapada:</strong> " . htmlspecialchars($terminoEscapado);
echo "</div>";
// 2. Construcción segura del patrón de búsqueda insensible a mayúsculas
$patron = '/' . $terminoEscapado . '/i';
echo "<h4 style='color:#1e293b; margin-bottom:10px;'>Resultados en el catálogo:</h4>";
$encontrados = 0;
foreach ($catalogo as $item) {
if (preg_match($patron, $item)) {
$encontrados++;
// Resaltar visualmente la coincidencia en el texto
$resaltado = preg_replace($patron, '<mark style="background:#fef08a; padding:2px 4px; border-radius:3px; font-weight:bold;">$0</mark>', $item);
echo "<div style='background:#ecfdf5; border:1px solid #a7f3d0; padding:10px 14px; border-radius:6px; margin-bottom:8px;'>";
echo " 🎯 $resaltado";
echo "</div>";
}
}
if ($encontrados === 0) {
echo "<p style='color:#64748b;'>No se encontraron coincidencias.</p>";
}
echo "</div>";
Haz clic para editar este código