2016-08-13 41 views
0

我發現了一個代碼,用於在配置文件中的個人消息中使用bb-codes,但是當我回到設置以更改消息時,它會回顯html標記而不是bb-code替換。反向bb-codes回聲時

BB碼:

 if(isset($_POST['submit'])) { 

     if(isset($_POST['bio_message'])){ 
//BBCode Parser function 
function showBBcodes($text) { 
     // BBcode array 
     $find = array(
       '~\[b\](.*?)\[/b\]~s', 
       '~\[i\](.*?)\[/i\]~s', 
       '~\[u\](.*?)\[/u\]~s', 
       '~\[quote\](.*?)\[/quote\]~s', 
       '~\[url\]((?:ftp|https?)://.*?)\[/url\]~s', 
       '~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|bmp))\[/img\]~s' 
     ); 
     // HTML tags to replace BBcode 
     $replace = array(
       '<b>$1</b>', 
       '<i>$1</i>', 
       '<p style="text-decoration:underline;">$1</p>', 
       '<pre>$1</'.'pre>', 
       '<a href="$1">$1</a>', 
       '<img src="$1" alt="" />' 
     ); 
     // Replacing the BBcodes with corresponding HTML tags 
     return preg_replace($find,$replace,$text); 
} 
// How to use the above function: 
$text = $_POST['bio_message']; 
$htmltext = showBBcodes($text); 

     } 

      $id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8'); 

      $bio_sql = "UPDATE users SET bio = '$htmltext' WHERE id = '$id'"; 
      $db->query($bio_sql); 
     }else{} 

呼應生物在textarea的:

<?php 
$id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8'); 
$SQL = "SELECT * FROM users WHERE id = '$id'"; 


$result = $db->query($SQL); 

/* associative array */ 
$row = $result->fetch_array(MYSQLI_ASSOC); 
print(htmlentities($row['bio'], ENT_QUOTES, 'UTF-8')); 

    $result->free(); 
?> 
+0

好代碼,你這樣做完全一樣的只是另一種方式圓。 –

+0

嘗試過,但不會工作。 repleaced $ find和$ replace以及切換順序。 –

+0

您還必須編輯正則表達式和替換。 –

回答

0

試試這個功能

function showHTML($text) { 
    // HTML tags to replace 
    $find = array(
     '~<b>(.*?)</b>~s', 
     '~<i>(.*?)</i>~s', 
     '~<p style="text-decoration:underline;">(.*?)</p>~s', 
     '~<pre>(.*?)</pre>~s', 
     '~<a href="(.*?)">(.*?)</a>~s', 
     '~<img src="(.*?)" alt="" />~s' 
    ); 

    // BBcode array 
    $replace = array(
     '[b]$1[/b]', 
     '[i]$1[/i]', 
     '[u]$1[/u]', 
     '[quote]$1[/quote]', 
     '[url]$1[/url]', 
     '[img]$1[/img]' 
    ); 

    // Replacing the BBcodes with corresponding HTML tags 
    return preg_replace($find,$replace,$text); 
} 

輸入:

<i>fsfsdfsf</i> <a href="http://abc.de">http://abc.de</a> 

輸出:

[i]fsfsdfsf[/i] [url]http://abc.de[/url] 
+0

首先將函數添加到您的PHP代碼中,然後使用showHTML($ text) –

+0

調用它無法使其工作。 我需要showBBcodes($文本)才能讓它回聲,但它會得到一個錯誤或什麼,因爲它會削減所有低於該部分時,我添加它 –

+0

我建議您閱讀PHP的基本知識,特別是功能和它們的用法。你應該將你的原始函數和我的原始函數移動到一個單獨的文件中,例如funtions.php,並通過include_once('functions.php');來包含它。然後,你只需要調用showHTML方法,當你想用HTML代替BBCode和showBBcode,當你想將HTML轉換爲BBcode –

0

這是我目前使用的嘗試呼應$row['bio']

<?php        
    function showHTML($text) { 
     // HTML tags to replace 
     $find = array(
      '~<b>(.*?)</b>~s', 
      '~<i>(.*?)</i>~s', 
      '~<p style="text-decoration:underline;">(.*?)</p>~s', 
      '~<pre>(.*?)</pre>~s', 
      '~<a href="(.*?)">(.*?)</a>~s', 
      '~<img src="(.*?)" alt="" />~s' 
     ); 

     // BBcode array 
     $replace = array(
      '[b]$1[/b]', 
      '[i]$1[/i]', 
      '[u]$1[/u]', 
      '[quote]$1[/quote]', 
      '[url]$1[/url]', 
      '[img]$1[/img]' 
     ); 

     // Replacing the BBcodes with corresponding HTML tags 
     return preg_replace($find,$replace,$text); 
    } 

    $result = $db->query("SELECT * FROM users WHERE id='$id'"); 
    $row = $result->fetch_array(MYSQLI_ASSOC); 

    print(showHTML($row['bio'], ENT_QUOTES, 'UTF-8')); 
?> 
+0

哦,我看到它是我的壞。用'htmlentities(showHTML($ row ['bio']),ENT_QUOTES,'UTF-8')' –

+0

nope替換'showHTML($ row ['bio'],ENT_QUOTES,'UTF-8')' 。它保存和回顯我想要它在我的個人資料,但不提交後在文本區 –

+0

對我來說,它看起來像你只是執行SQL查詢,甚至不從數據庫中獲取數據。 $ row ['bio']是你提取的結果。 –