diff --git a/Shared/Infrastructure/Scripts/test-specific-cases.php b/Shared/Infrastructure/Scripts/test-specific-cases.php
new file mode 100644
index 00000000..cbd9c594
--- /dev/null
+++ b/Shared/Infrastructure/Scripts/test-specific-cases.php
@@ -0,0 +1,187 @@
+set_charset("utf8mb4");
+
+// IDs a probar (casos variados)
+$test_ids = [20, 23, 65, 377, 98, 107, 144];
+
+function detectIssues($html) {
+ $issues = [];
+ libxml_use_internal_errors(true);
+ $doc = new DOMDocument("1.0", "UTF-8");
+ $doc->loadHTML('
' . $html . '
', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
+ libxml_clear_errors();
+
+ $validChildren = ["li", "script", "template"];
+ foreach (["ul", "ol"] as $tag) {
+ foreach ($doc->getElementsByTagName($tag) as $list) {
+ foreach ($list->childNodes as $child) {
+ if ($child->nodeType === XML_ELEMENT_NODE) {
+ $childTag = strtolower($child->nodeName);
+ if (!in_array($childTag, $validChildren)) {
+ $issues[] = "<$tag> contiene <$childTag>";
+ }
+ }
+ }
+ }
+ }
+ return $issues;
+}
+
+function fixMalformedLists($html) {
+ $result = ['fixed' => false, 'html' => $html, 'changes' => 0];
+
+ libxml_use_internal_errors(true);
+ $doc = new DOMDocument("1.0", "UTF-8");
+ $doc->loadHTML('' . $html . '
', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
+ libxml_clear_errors();
+
+ $lists = [];
+ foreach ($doc->getElementsByTagName('ul') as $ul) { $lists[] = $ul; }
+ foreach ($doc->getElementsByTagName('ol') as $ol) { $lists[] = $ol; }
+
+ $changes = 0;
+ $validChildren = ["li", "script", "template"];
+
+ foreach ($lists as $list) {
+ $nodesToProcess = [];
+ foreach ($list->childNodes as $child) {
+ if ($child->nodeType === XML_ELEMENT_NODE) {
+ $tagName = strtolower($child->nodeName);
+ if (!in_array($tagName, $validChildren)) {
+ $nodesToProcess[] = $child;
+ }
+ }
+ }
+
+ foreach ($nodesToProcess as $node) {
+ $tagName = strtolower($node->nodeName);
+ $prevLi = null;
+ $prev = $node->previousSibling;
+
+ while ($prev) {
+ if ($prev->nodeType === XML_ELEMENT_NODE && strtolower($prev->nodeName) === 'li') {
+ $prevLi = $prev;
+ break;
+ }
+ $prev = $prev->previousSibling;
+ }
+
+ if ($prevLi) {
+ $prevLi->appendChild($node);
+ $changes++;
+ } else {
+ $newLi = $doc->createElement('li');
+ $list->insertBefore($newLi, $node);
+ $newLi->appendChild($node);
+ $changes++;
+ }
+ }
+ }
+
+ if ($changes > 0) {
+ $wrapper = $doc->getElementById('w');
+ if ($wrapper) {
+ $innerHTML = '';
+ foreach ($wrapper->childNodes as $child) {
+ $innerHTML .= $doc->saveHTML($child);
+ }
+ $result['html'] = $innerHTML;
+ $result['fixed'] = true;
+ $result['changes'] = $changes;
+ }
+ }
+
+ return $result;
+}
+
+echo "=====================================================\n";
+echo " PRUEBA DE CORRECCIÓN EN CASOS VARIADOS\n";
+echo "=====================================================\n\n";
+
+$ids_str = implode(',', $test_ids);
+$query = "SELECT id, page, html FROM datos_seo_pagina WHERE id IN ($ids_str)";
+$result = $conn->query($query);
+
+$all_passed = true;
+
+while ($row = $result->fetch_assoc()) {
+ $id = $row['id'];
+ $url = $row['page'];
+ $html = $row['html'];
+
+ echo "─────────────────────────────────────────────────\n";
+ echo "POST ID: $id\n";
+ echo "URL: $url\n\n";
+
+ // Detectar problemas antes
+ $issues_before = detectIssues($html);
+ echo "ANTES:\n";
+ echo " Problemas: " . count($issues_before) . "\n";
+ $unique_types = array_unique($issues_before);
+ foreach ($unique_types as $type) {
+ echo " - $type\n";
+ }
+
+ // Aplicar corrección
+ $fixResult = fixMalformedLists($html);
+
+ // Detectar problemas después
+ $issues_after = detectIssues($fixResult['html']);
+
+ echo "\nDESPUÉS:\n";
+ echo " Cambios aplicados: {$fixResult['changes']}\n";
+ echo " Problemas restantes: " . count($issues_after) . "\n";
+
+ if (count($issues_after) > 0) {
+ echo " ⚠️ Problemas NO resueltos:\n";
+ foreach (array_unique($issues_after) as $type) {
+ echo " - $type\n";
+ }
+ $all_passed = false;
+ }
+
+ // Verificar integridad del HTML
+ $tags_before = [
+ 'ul' => substr_count($html, ' substr_count($html, ' substr_count($html, '- substr_count($fixResult['html'], '
substr_count($fixResult['html'], ' substr_count($fixResult['html'], '- : {$tags_before['ul']} → {$tags_after['ul']} ";
+ echo ($tags_before['ul'] === $tags_after['ul'] ? "✓" : "⚠️ CAMBIÓ") . "\n";
+ echo "
: {$tags_before['ol']} → {$tags_after['ol']} ";
+ echo ($tags_before['ol'] === $tags_after['ol'] ? "✓" : "⚠️ CAMBIÓ") . "\n";
+ echo " - : {$tags_before['li']} → {$tags_after['li']} ";
+ echo ($tags_before['li'] === $tags_after['li'] ? "✓" : "⚠️ CAMBIÓ") . "\n";
+
+ // Resultado
+ if (count($issues_after) === 0 &&
+ $tags_before['ul'] === $tags_after['ul'] &&
+ $tags_before['ol'] === $tags_after['ol']) {
+ echo "\n✅ RESULTADO: CORRECCIÓN EXITOSA\n";
+ } else {
+ echo "\n❌ RESULTADO: REQUIERE REVISIÓN\n";
+ $all_passed = false;
+ }
+}
+
+echo "\n=====================================================\n";
+if ($all_passed) {
+ echo "✅ TODOS LOS CASOS PASARON LA PRUEBA\n";
+} else {
+ echo "⚠️ ALGUNOS CASOS REQUIEREN REVISIÓN\n";
+}
+echo "=====================================================\n";
+
+$conn->close();