2016-05-01 80 views
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)); 
    } 
} 
?> 

任何幫助,非常感謝。

回答

0

空白區域可能是utf-8編碼的。使用echo bin2hex($url)檢查您現有的字符串,找出它包含的字節。 你也可以試試這個:

str_replace("\xE2\x80\xAF", "_", $url) 

這是用下劃線替換零寬空格(UTF-8編碼E2 80 AF)。