quotes */ class SimpleMarkdown { /** * Parse markdown text to HTML */ public static function parse($text) { // Convert special characters to HTML entities first $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); // Headers (h1-h6) $text = preg_replace('/^#{1,6}\s+(.+)$/m', '
$1', $text);
// Code blocks
$text = preg_replace('/```(.+?)```/s', '$1', $text);
// Links
$text = preg_replace('/\[(.+?)\]\((.+?)\)/', '$1', $text);
// Blockquotes
$text = preg_replace('/^>\s+(.+)$/m', '$1', $text); // Unordered lists $text = preg_replace('/^\-\s+(.+)$/m', '
(.+?)<\/code>/i', '`$1`', $markdown);
$markdown = preg_replace('/(.+?)<\/code><\/pre>/is', "```$1```", $markdown);
// Links
$markdown = preg_replace('/(.+?)<\/a>/i', '[$2]($1)', $markdown);
// Blockquotes
$markdown = preg_replace('/(.+?)<\/blockquote>/i', '> $1', $markdown);
// Lists (simplified)
$markdown = preg_replace('/(.+?)<\/ul>/is', '$1', $markdown);
$markdown = preg_replace('/- (.+?)<\/li>/i', '- $1', $markdown);
// Line breaks
$markdown = preg_replace('/
/i', "\n", $markdown);
// Decode HTML entities
$markdown = htmlspecialchars_decode($markdown, ENT_QUOTES);
// Clean up
$markdown = preg_replace('/\n{3,}/', "\n\n", $markdown);
$markdown = trim($markdown);
return $markdown;
}
}
?>