PHP使用正则将markdown文本转化为html文本内容

技术 置顶 精帖
0 124
peng49
peng49 2024-03-28 09:56:15
 

代码

  1. $content = '#### 内容
  2. **A**: *B*
  3. **C**: D
  4. [下载 ](https://www.baidu.com?id=1 )';
  5. preg_match_all('/.*?(\n|$)/', $content, $matches);
  6. $rows = array_map(function ($line) {
  7. $line = preg_replace('/\*\*(.*?)\*\*/', '<b>$1</b>', $line);//文字加粗
  8. $line = preg_replace('/\*(.*?)\*/', '<i>$1</i>', $line);//斜体
  9. if (preg_match('/^(#+)\s*(.*)/', $line, $match)) {//标题
  10. $number = min(strlen($match[1]), 7);
  11. return "<h{$number}>{$match[2]}</h{$number}>";
  12. }
  13. $line = preg_replace('/!\[(.*)\]\(\s*(\S+)\s*[\'"]?(.*?)[\'"]?\)/', '<img src="$2" alt="$1" title="$3" />', $line);//图片
  14. $line = preg_replace('/\[(.*)\]\(\s*(\S+)\s*\)/', '<a href="$2" title="$1">$1</a>', $line);//链接
  15. return "<p>{$line}</p>";
  16. }, $matches[0] ?? []);
  17. $html = implode(PHP_EOL, $rows);

效果如下

  1. <h4>内容
  2. </h4>
  3. <p> <b>A</b>: <i>B</i>
  4. </p>
  5. <p> <b>C</b>: D
  6. </p>
  7. <p> <a href="https://www.baidu.com?id=1" title="下载 ">下载 </a></p>
  8. <p></p>
回帖
登录
忘记密码?