【问题标题】:PHP bbcode parser with escaping option带有转义选项的 PHP bbcode 解析器
【发布时间】:2023-04-11 07:53:01
【问题描述】:

我有这个功能:

function parse_bbcode($str = ''){

    $find = array(
        "'\[b\](.*?)\[/b\]'is",
        "'\[i\](.*?)\[/i\]'is",
        "'\[u\](.*?)\[/u\]'is",
        "'\[s\](.*?)\[/s\]'is",
        "'\[img\](.*?)\[/img\]'i",
        "'\[url\](.*?)\[/url\]'i",
        "'\[url=(.*?)\](.*?)\[/url\]'i",
        "'\[link\](.*?)\[/link\]'i",
        "'\[link=(.*?)\](.*?)\[/link\]'i"
    );

    $replace = array(
        '<strong>\\1</strong>',
        '<em>\\1</em>',
        '<u>\\1</u>',
        '<s>\\1</s>',
        '<img src="\\1" alt="" width="100%" />',
        '<a href="\\1">\\1</a>',
        '<a href="\\1">\\2</a>',
        '<a href="\\1">\\1</a>',
        '<a href="\\1">\\2</a>'
    );

    return preg_replace($find, $replace, $str);

}

用于解析 bbcodes。

如何为 bbcodes 添加可选转义?

例子:

谢谢[b]你[/b]迈克! - 谢谢迈克!

感谢\[b]你[/b]迈克! - 谢谢[b]你[/b]迈克!

【问题讨论】:

  • BBcode 是 1998 年的!我可以问一下你为什么要重新发明这个东西吗?
  • 嗨 Lory,你为什么要自己创建一个函数?您是否尝试过 packagist 的 BB 代码?我个人安装了一个作曲家BB代码,它完美无瑕!见:packagist.org/?q=bbcodes&idx=packagist&p=0

标签: php regex parsing preg-replace bbcode


【解决方案1】:

看来我做到了!

function parse_bbcode($str = ''){

    $find = array(
        "'([^\\\\])\[b\](.*?)([^\\\\])\[/b\]'is",
        "'\[i\](.*?)\[/i\]'is",
        "'\[u\](.*?)\[/u\]'is",
        "'\[s\](.*?)\[/s\]'is",
        "'\[img\](.*?)\[/img\]'i",
        "'\[url\](.*?)\[/url\]'i",
        "'\[url=(.*?)\](.*?)\[/url\]'i",
        "'\[link\](.*?)\[/link\]'i",
        "'\[link=(.*?)\](.*?)\[/link\]'i",
        "'([^\\\\])\\\\\['i"
    );

    $replace = array(
        '\\1<strong>\\2\\3</strong>',
        '<em>\\1</em>',
        '<u>\\1</u>',
        '<s>\\1</s>',
        '<img src="\\1" alt="" width="100%" />',
        '<a href="\\1">\\1</a>',
        '<a href="\\1">\\2</a>',
        '<a href="\\1">\\1</a>',
        '<a href="\\1">\\2</a>',
        '\\1['
    );

    return preg_replace($find, $replace, $str);

}

(这个例子只转义 [b] 标签!)

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多