PHP preg_replace_callback替换错误的开放和结束标记

时间:2014-11-11 18:30:31

标签: preg-replace

我的BB-Code功能有问题。我已经测试了followig输入来替换:

Testtext! <b>text<u>testtext</u>test</b><b>test</b>

并获得此(混合)输出:

Testtext! [b]text[u]testtext[/u]test</b>test<b>test[/b]

我的PHP代码:

function html_to_bbcode($input) {
$regex[] = '#\<b>((?:[^[]|\<(?!/?b>)|(?R))+)\</b>#im';
$regex[] = '#\<i>((?:[^[]|\<(?!/?i>)|(?R))+)\</i>#im';
$regex[] = '#\<u>((?:[^[]|\<(?!/?u>)|(?R))+)\</u>#im';

if (is_array($input)) {
    $tag = explode('>', $input[0]);
    $tag = str_replace('<', '', $tag[0]);
if ($tag == 'b') {
    $input = '[b]'.$input[1].'[/b]';
} else if ($tag == 'i') {
    $input = '[i]'.$input[1].'[/i]';
} else if ($tag == 'u') {
    $input = '[u]'.$input[1].'[/u]';
}
}
return preg_replace_callback($regex, 'html_to_bbcode', $input);
}

(还有一些标签)

我无法找到这个错误:(有人为此解决这个问题吗?

0 个答案:

没有答案