如何用属性替换bbcode标签


How to replace bbcode tags with attributes

我的共享服务器最近升级到php5.4,它破坏了PEAR HTMLBBcode。

我试着写一个小函数来代替一些简单的bbcode的解析器,用一些我在一些论坛上找到的代码。

我想要解析的bbcode包括标签,例如带有属性的image标签:

[img src="" h="" w="" alt=""]
[*] //for bulleted lists


由于我对正则表达式的了解有限,也许有人可以解释如何将属性添加到img行?我假设@是为了抑制preg_replace()的错误?

你如何处理这个标签[*]?

// original function
function bbCode($string) {
    $search = array(    
        '@'[(?i)img'](.*?)'[/(?i)img']@si',
        '@'[url's*='s*(.*?)'s*'](.*?)'['/url']@si'
    );
    $replace = array(
        '<img src="''1">',
        '<a href="''1">''2</a>'
    );
    return preg_replace($search , $replace, $string);
}


// test
function bbCode($string) {
    $search = array(    
        '@'[img's*='s*(.*?)'s*'
         's*=[(0-9)+]
         's*=[(0-9)+]
         's*='s*(.*?)'s*']
         (.*?)'['/img']@si',
        '[*]'
    );
    $replace = array(
        '<img src="''1" height="''2" width="''3" alt="''4">',
        '<li></li>'
    );
    return preg_replace($search , $replace, $string);
}

方括号是正则表达式中用于创建组的特殊字符。星号也是一个正则表达式指令。如果您试图匹配文字内容,则需要对两者进行转义。您可能希望将测试代码更改为如下内容。但请务必测试我的建议,因为我是即兴创作的,没有先确认。

// test
function bbCode($string) {
    $search = array(    
        '@'[img's*='s*(.*?)'s*'
         's*=[(0-9)+]
         's*=[(0-9)+]
         's*='s*(.*?)'s*']
         (.*?)'['/img']@si',
        ''['*']'
    );
    $replace = array(
        '<img src="''1" height="''2" width="''3" alt="''4">',
        '<li></li>'
    );
    return preg_replace($search , $replace, $string);
}

解决这些问题所需的正则表达式需要更仔细地检查。PEAR bbcode库在这个方向上已经领先了许多步。

尽管PEAR库仍然存在一些小问题,但它仍然比我们在这里尝试的要好。

我在php.ini中添加了路径,由于某些原因它返回了错误

require "/path/to/pear";

我的主机支持可以通过

修复引用
include "../path/to/pear_bbcode";