1
我目前使用PHP類來解釋通過表單輸入的BBCode,以便它在用戶的頁面上訪問其頁面時正確顯示。使用PHP來解釋BBCode,但無法使用str_replace
不過,我已經打從BB代碼轉換碰釘子爲HTML,我會非常喜歡它下面的
[wiki]Article Title Here[/wiki]
轉換爲
<a href="http://example.com/article_title_here">Article Title Here</a>
,但它目前只轉換爲
<a href="http://example.com/article title here">Article Title Here</a>
我試過使用str_replace重新用下劃線空格,但它沒有似乎現在想爲我工作。
我已經發布了以下代碼以供參考,如果它有幫助,我目前正在運行PHP 7.0.4。
<?php
class bbcode {
public static function tohtml($text,$advanced=FALSE,$charset='utf-8'){
$basic_bbcode = array(
'[b]', '[/b]',
'[i]', '[/i]',
'[u]', '[/u]',
);
$basic_html = array(
'<b>', '</b>',
'<i>', '</i>',
'<u>', '</u>',
'<s>', '</s>',
);
$text = str_replace($basic_bbcode, $basic_html, $text);
if ($advanced){
$advanced_bbcode = array(
'#\[wiki](.+)\[/wiki]#Usi',
'#\[email]([\w\.\-][email protected][a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]*\.\w{1,4})\[/email]#Usi',
'#\[email=([\w\.\-][email protected][a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]*\.\w{1,4})](.+)\[/email]#Usi',
'#\[img](.+)\[/img]#Usi',
'#\[img=(.+)](.+)\[/img]#Usi',
'#\[code](\r\n)?(.+?)(\r\n)?\[/code]#si',
'#\[youtube]http://[a-z]{0,3}.youtube.com/watch\?v=([0-9a-zA-Z]{1,11})\[/youtube]#Usi',
'#\[youtube]([0-9a-zA-Z]{1,11})\[/youtube]#Usi',
);
$advanced_html = array(
'<a target="_blank" href="http://example.com/$1">$1</a>',
'<a href="mailto: $1">$1</a>',
'<a href="mailto: $1">$2</a>',
'<img src="$1" alt="$1" />',
'<img src="$1" alt="$2" />',
'<div class="code">$2</div>',
'<object type="application/x-shockwave-flash" style="width: 450px; height: 366px;" data="http://www.youtube.com/v/$1"><param name="movie" value="http://www.youtube.com/v/$1" /><param name="wmode" value="transparent" /></object>',
'<object type="application/x-shockwave-flash" style="width: 450px; height: 366px;" data="http://www.youtube.com/v/$1"><param name="movie" value="http://www.youtube.com/v/$1" /><param name="wmode" value="transparent" /></object>',
);
$text = preg_replace($advanced_bbcode, $advanced_html,$text);
}
return bbcode::nl2br($text);
}
public static function remove($text){
$text = htmlspecialchars($text, ENT_QUOTES,$charset);
return $text;
}
public static function nl2br($var){
return str_replace(array('\\r\\n','\r\\n','r\\n','\r\n', '\n', '\r'), '<br />', nl2br($var));
}
}
?>
任何幫助,非常感謝。