<?php
function markdownToText(string $md): string {
// Code blocks first so we don't strip syntax inside them
$md = preg_replace('/```.*?```/s', '', $md);
$md = preg_replace('/`([^`]+)`/', '$1', $md);
// Images / links → keep alt or label only
$md = preg_replace('/!\[([^\]]*)\]\([^\)]+\)/', '$1', $md);
$md = preg_replace('/\[([^\]]+)\]\([^\)]+\)/', '$1', $md);
// Headings, blockquotes, list markers
$md = preg_replace('/^#{1,6}\s+/m', '', $md);
$md = preg_replace('/^[>\-\*\+]\s+/m', '', $md);
// Bold / italic
$md = preg_replace('/(\*\*|__)(.*?)\1/', '$2', $md);
$md = preg_replace('/(\*|_)(.*?)\1/', '$2', $md);
// Horizontal rules
$md = preg_replace('/^[-*_]{3,}$/m', '', $md);
return trim(preg_replace('/\n{3,}/', "\n\n", $md));
}
echo markdownToText("# Hello **world**\n\nA [link](https://x.com) and `code`.");
// Hello world
//
// A link and code.
Create a free account and build your private vault. Share publicly whenever you want.