2013-05-22 2 views
1

помощь, им пытаются преобразовать BBCode в HTML код, и я постоянно получаю эту ошибкузаменить preg_replace BBCode в HTML

В BBCode является [url=link][attach]1[/attach][/url]

SCREAM: Error suppression ignored for(!) Warning: preg_replace(): Unknown modifier '/' 

     $content = $getThread['message']; 
     $bbUrl = '/\[url=(http|https|ftp)://{1}([a-zA-Z0-9/%@?:#&+._=-]*)\](.*?)\[/url\]/gixsm'; 
     $htmlUrl = '<a href="{$1}://{$2}" target="_blank">{$3}</a>'; 
     $atable = $thread->get_atable($tid); 
     $content = preg_replace($bbUrl, $htmlUrl, $content); 

после URL сделано, будет преобразовывать [приложить ] 1 [/ attach] снова с помощью

$bbAttachment = 'etc...'; 
$htmlAttachment = 'etc...'; 
$content = preg_replace($bbAttachment, $htmlAttachment , $content); 

Это правильный способ сделать?

Оценка за помощь.

+2

Вам необходимо избегать форсалей '/' с помощью обратных косых черт при использовании foreslash в качестве разделителя шаблона, чтобы они читали '\ /'. –

ответ

1

У вас есть ошибка в вашем регулярном выражении. Для символа '/' вам нужно надлежащее экранирование.

изменить это

$bbUrl = '/\[url=(http|https|ftp)://{1}([a-zA-Z0-9/%@?:#&+._=-]*)\](.*?)\[/url\]/gixsm'; 

к этому

$bbUrl = '/\[url=(http|https|ftp):\/\/([a-zA-Z0-9\/%@?:#&+._=-]+)\](.+?)\[\/url\]/gixsm'; 

Вы также должны изменить * к +, потому что я предполагаю, что вы не хотите, чтобы разобрать адресов, которые могут быть пустыми.

+0

Лучше, я думаю, было бы выбрать другой разделитель. Прошлое некоторое время это просто легче. – cHao

Смежные вопросы