2014-05-02 92 views
0

我的共享服务器最近升级到php5.4,这打破了PEAR HTMLBBcode。如何用属性替换bbcode标记

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

我想解析BB代码的包括标签与属性的图像标签,如:

[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

简单地固定参考返回的错误'我的共享服务器最近升级到php5.2'你有哪个版本?我强烈建议你去寻找另一个主机(php 5.4+)。无论如何,'@'是正则表达式分隔符,您甚至可以使用'#'或'/'代替。我也对作者的创造力感到惊讶,在稍后设置的地方添加“(?i)”。 – HamZa

+1

它实际上是5.4 – rrrfusco

回答

0

解决这些问题所需的正则表达式需要仔细检查。 PEAR bbcode库已经在这方面迈出了许多步骤。

尽管PEAR库仍然存在小问题,但仍然比我们在此尝试的要好。

我加在php.ini的路径和它的一些原因

require "/path/to/pear"; 

我的主机支持才得以通过

include "../path/to/pear_bbcode"; 
0

方括号中用于创建组的正则表达式的特殊字符。星号也是一个正则表达式指令。如果您尝试匹配文字内容,则两者都需要转义。你会想将你的测试代码改成这样的东西。但是请确保测试我的建议,因为我正在将它从袖口上取下来,并没有先确认。

// 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); 
}