我的共享服务器最近升级到php5.4,破坏了PEAR HTMLBBcode。
我尝试编写一个小函数来替换一些简单bbcode的解析器,我在一些论坛上找到了一些代码。
我要解析的bbcode包含标签,例如带有属性的图片标签:
[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);
}
答案 0 :(得分:0)
Square Brackets是用于创建组的正则表达式中的特殊字符。星号也是正则表达式指令。如果您尝试匹配文字内容,则都需要进行转义。您可能希望将测试代码更改为此类代码。但是一定要测试我的建议,因为我是从袖口做起来的,并没有先确认。
// 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);
}
答案 1 :(得分:0)
解决这些问题所需的正则表达式需要仔细研究。 PEAR bbcode库已朝这个方向迈出了许多步骤。
虽然PEAR库仍然存在小问题,但它仍然比我们在这里尝试的要好。
我在php.ini中添加了路径,但由于某种原因它返回了错误
require "/path/to/pear";
我的主机支持能够通过
简单地修复引用include "../path/to/pear_bbcode";