' . $text . ''; $link_count++; return $placeholder; }, $markdown); // Détection et conversion des URLs brutes en liens cliquables $urlPattern = '/(https?:\/\/[^\s<]+[^\s<\.)])/i'; $markdown = preg_replace_callback($urlPattern, function($matches) use (&$links, &$link_count) { $url = $matches[1]; $placeholder = "___LINK_{$link_count}___"; $links[$placeholder] = '' . $url . ''; $link_count++; return $placeholder; }, $markdown); // Conversion du texte en gras et italique (**texte** et *texte*) $markdown = preg_replace('/\*\*(.*?)\*\*/s', '$1', $markdown); $markdown = preg_replace('/\*(.*?)\*/s', '$1', $markdown); // Conversion des listes à puces $markdown = preg_replace('/^- (.*?)$/m', '
  • $1
  • ', $markdown); $markdown = preg_replace('/(
  • .*?<\/li>\n?)+/s', '', $markdown); // Conversion des listes numérotées $markdown = preg_replace('/^\d+\. (.*?)$/m', '
  • $1
  • ', $markdown); $markdown = preg_replace('/(
  • .*?<\/li>\n?)+/s', '
      $0
    ', $markdown); // Gestion des retours à la ligne $markdown = nl2br($markdown); // Nettoyage des balises br dans les listes $markdown = preg_replace('/<\/li>
    /', '
  • ', $markdown); // Restaurer les liens foreach ($links as $placeholder => $link) { $markdown = str_replace($placeholder, $link, $markdown); } return $markdown; }