我有这个功能:
function parse_bbcode($str = ''){
$find = array(
"'\[b\](.*?)\[/b\]'is",
"'\[i\](.*?)\[/i\]'is",
"'\[u\](.*?)\[/u\]'is",
"'\[s\](.*?)\[/s\]'is",
"'\[img\](.*?)\[/img\]'i",
"'\[url\](.*?)\[/url\]'i",
"'\[url=(.*?)\](.*?)\[/url\]'i",
"'\[link\](.*?)\[/link\]'i",
"'\[link=(.*?)\](.*?)\[/link\]'i"
);
$replace = array(
'<strong>\\1</strong>',
'<em>\\1</em>',
'<u>\\1</u>',
'<s>\\1</s>',
'<img src="\\1" alt="" width="100%" />',
'<a href="\\1">\\1</a>',
'<a href="\\1">\\2</a>',
'<a href="\\1">\\1</a>',
'<a href="\\1">\\2</a>'
);
return preg_replace($find, $replace, $str);
}
用于解析bbcodes。
如何为bbcodes添加可选性转义?
示例:
感谢[b]你[/ b]迈克! - 感谢你 Mike!
谢谢\ [b]你[/ b]迈克! - 感谢[b]你[/ b]迈克!
答案 0 :(得分:0)
看起来我做到了!
function parse_bbcode($str = ''){
$find = array(
"'([^\\\\])\[b\](.*?)([^\\\\])\[/b\]'is",
"'\[i\](.*?)\[/i\]'is",
"'\[u\](.*?)\[/u\]'is",
"'\[s\](.*?)\[/s\]'is",
"'\[img\](.*?)\[/img\]'i",
"'\[url\](.*?)\[/url\]'i",
"'\[url=(.*?)\](.*?)\[/url\]'i",
"'\[link\](.*?)\[/link\]'i",
"'\[link=(.*?)\](.*?)\[/link\]'i",
"'([^\\\\])\\\\\['i"
);
$replace = array(
'\\1<strong>\\2\\3</strong>',
'<em>\\1</em>',
'<u>\\1</u>',
'<s>\\1</s>',
'<img src="\\1" alt="" width="100%" />',
'<a href="\\1">\\1</a>',
'<a href="\\1">\\2</a>',
'<a href="\\1">\\1</a>',
'<a href="\\1">\\2</a>',
'\\1['
);
return preg_replace($find, $replace, $str);
}
(这个exaple只逃避[b]标签!)