Метод inlineMarkdown в Laravel покращує обробку рядків, забезпечуючи безпечну трансформацію Markdown, сумісного з GitHub, в HTML з вбудованим захистом від XSS та налаштуваннями безпеки
Цей метод дозволяє безпечно конвертувати Markdown, надаючи детальний контроль над параметрами безпеки:
use Illuminate\Support\Str;
// Основна конвертація
$html = Str::inlineMarkdown('**Laravel**');
// Результат: <strong>Laravel</strong>
// Безпечна конвертація з параметрами
$html = Str::inlineMarkdown(
'Inject: <script>alert("Hello XSS!");</script>',
[
'html_input' => 'strip',
'allow_unsafe_links' => false,
]
);
// Результат: Inject: alert("Hello XSS!");
Цей метод особливо корисний для систем, що дозволяють користувачам генерувати контент:
class ContentProcessor
{
protected $secureOptions = [
'html_input' => 'strip',
'allow_unsafe_links' => false
];
public function formatPost(string $content)
{
return Str::inlineMarkdown(
$content,
$this->secureOptions
);
}
public function processHashtags(string $content)
{
// Конвертуємо #hashtag в посилання, зберігаючи markdown
$processed = preg_replace(
'/#(\w+)/',
'[#$1](/tags/$1)',
$content
);
return Str::inlineMarkdown(
$processed,
$this->secureOptions
);
}
public function formatSystemMessage(string $template, array $variables)
{
$content = strtr($template, $variables);
return Str::inlineMarkdown(
$content,
[
'html_input' => 'escape',
'allow_unsafe_links' => false
]
);
}
}
// Використання
$processor = new ContentProcessor();
$post = $processor->formatPost('**Breaking** news update!');
$hashtag = $processor->processHashtags('Love #Laravel development!');
Метод ідеально підходить для форумів і систем обговорення, де потрібні безпечні формати:
class ForumPostService
{
public function processReply(string $content, User $author)
{
// Обробка кодових блоків і форматування
$formatted = Str::inlineMarkdown($content, [
'html_input' => 'strip',
'allow_unsafe_links' => false,
'use_autolinks' => true
]);
return $this->addAuthorContext($formatted, $author);
}
public function formatQuote(string $originalContent, string $newContent)
{
$quote = "> " . str_replace("\n", "\n> ", $originalContent);
$combined = $quote . "\n\n" . $newContent;
return Str::inlineMarkdown($combined, [
'html_input' => 'strip',
'allow_unsafe_links' => false
]);
}
public function processCodeSnippet(string $content)
{
return Str::inlineMarkdown($content, [
'html_input' => 'strip',
'allow_unsafe_links' => false,
'use_underline' => false // Запобігання конфліктів з кодом
]);
}
}
Для систем сповіщень, що потребують форматованих повідомлень:
class NotificationFormatter
{
public function formatActivityUpdate(Activity $activity)
{
$template = '**{user}** {action} в *{project}*';
$message = strtr($template, [
'{user}' => $activity->user->name,
'{action}' => $activity->description,
'{project}' => $activity->project->title
]);
return Str::inlineMarkdown($message, [
'html_input' => 'escape',
'allow_unsafe_links' => false
]);
}
public function formatSystemAlert(string $message, array $context = [])
{
$processed = strtr($message, $context);
return Str::inlineMarkdown($processed, [
'html_input' => 'strip',
'allow_unsafe_links' => false,
'use_autolinks' => false // Вимкнено для безпеки
]);
}
}
Метод inlineMarkdown забезпечує безпечну обробку Markdown, пропонуючи всебічний захист від XSS, при цьому зберігаючи гнучкість для форматування контенту користувачів через типовий синтаксис Markdown, такий як жирний, курсив, посилання і фрагменти коду