', '', $html); $html = str_ireplace('
', "\n", $html); // 3. Asegurar que,
// Mantenemos
para que nuestro parser interno (TelegramSender) lo procese.
$allowed_tags = '
';
$html = strip_tags($html, $allowed_tags);
// 5. Limpiar múltiples saltos de línea consecutivos, pero NO los espacios en blanco.
// Esto previene más de dos saltos de línea seguidos, que Telegram ignora.
$html = trim($html);
$html = preg_replace('/[\r\n]{3,}/', "\n\n", $html);
// 6. Corregir etiquetas que pudieran quedar abiertas (buena práctica).
$html = $this->fixUnmatchedTags($html);
error_log("HTML convertido para Telegram: " . $html);
return $html;
}
/**
* Corrige etiquetas HTML no cerradas o mal formadas en el mensaje.
* @param string $html El HTML a corregir.
* @return string El HTML con las etiquetas corregidas.
*/
private function fixUnmatchedTags($html) {
$tags = ['b', 'strong', 'i', 'em', 'u', 'ins', 's', 'strike', 'del', 'code', 'pre'];
foreach ($tags as $tag) {
// Contar etiquetas de apertura y cierre
$openCount = substr_count(strtolower($html), "<$tag>");
$closeCount = substr_count(strtolower($html), "$tag>");
// Si hay más etiquetas de cierre que de apertura, eliminar las sobrantes
if ($closeCount > $openCount) {
$diff = $closeCount - $openCount;
$html = preg_replace("#{$tag}>#i", '', $html, $diff);
}
// Si hay más etiquetas de apertura que de cierre, agregar las que faltan al final
elseif ($openCount > $closeCount) {
$diff = $openCount - $closeCount;
$html .= str_repeat("{$tag}>", $diff);
}
}
return $html;
}
}