我的共享服务器最近升级到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',
'@[urls*=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(
'@[imgs*=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(
'@[imgs*=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";