2013-04-05 34 views
1

我被難倒了什麼應該是一個非常簡單的str_replace函數。 在我的數據庫中,我有一個Minecraft服務器motd(當天消息)的字段。當我從服務器收集數據時,我將包括motd在內的數據存儲在我的數據庫中。str_replace不能在數據庫返回工作

服務器能夠通過添加一個顏色代碼來對顏色進行着色,我已經將其存儲在數據庫中作爲&部分,然後是指定顏色的數字。我試圖使用str_replace將& sectnumber轉換爲具有實際顏色的html元素。我想出了以下代碼:

if ($server_data['show_motd'] == 1) { 
     $motd = $server_data['motd']; 
     $motd = str_replace("&sect0","</span><span style=\"color:#000\">", $motd); 
     $motd = str_replace("&sect1","</span><span style=\"color:#00A\">", $motd); 
     $motd = str_replace("&sect2","</span><span style=\"color:#0A0\">", $motd); 
     $motd = str_replace("&sect3","</span><span style=\"color:#0AA\">", $motd); 
     $motd = str_replace("&sect4","</span><span style=\"color:#A00\">", $motd); 
     $motd = str_replace("&sect5","</span><span style=\"color:#A0A\">", $motd); 
     $motd = str_replace("&sect6","</span><span style=\"color:#FA0\">", $motd); 
     $motd = str_replace("&sect7","</span><span style=\"color:#AAA\">", $motd); 
     $motd = str_replace("&sect8","</span><span style=\"color:#555\">", $motd); 
     $motd = str_replace("&sect9","</span><span style=\"color:#55F\">", $motd); 
     $motd = str_replace("&secta","</span><span style=\"color:#5F5\">", $motd); 
     $motd = str_replace("&sectb","</span><span style=\"color:#5FF\">", $motd); 
     $motd = str_replace("&sectc","</span><span style=\"color:#F55\">", $motd); 
     $motd = str_replace("&sectd","</span><span style=\"color:#F5F\">", $motd); 
     $motd = str_replace("&secte","</span><span style=\"color:#FF5\">", $motd); 
     $motd = str_replace("&sectf","</span><span style=\"color:#FFF\">", $motd); 

     echo " 

    <tr> 
    <td class=\"serverdisplayspan\">MOTD:</td> 
    <td class=\"serverdisplaylidet\"><span>$motd</span</td> 
    </tr> 
    "; 
} 

但是,沒有一個str_replace函數在做任何事情。奇怪的是,當我與

$motd = "&sectcWelcome to &sectbSkyBlock&sectc!" 

這就是存儲在數據庫中替換

$motd = $server_data['motd']; 

,它完美的作品。沒有str_replaces,這兩個變量看起來完全一樣。我甚至使用gettype()檢查每個變量的類型() 並且它們都是字符串。我也嘗試過對數據庫結果的utf_decode(),但似乎沒有任何工作。

數據庫結果和我剛輸入的字符串之間有一些區別嗎?我找不到它是什麼,但顯然必須有一個。

謝謝。

+0

所以在數據庫中的值是'&sectcWelcome到&sectbSkyBlock&sectc!'? – 2013-04-05 02:51:54

+0

是的,數據庫中的值就是這個。 – mongy910 2013-04-05 02:52:51

+0

而且很明顯,當你使用'$ motd =「&sectc歡迎來到&sectbSkyBlock&sectc!」' - 所有字符串替換函數都可以使用? – 2013-04-05 02:53:30

回答

1

如何像這樣(換出你的內嵌樣式的CSS類)

$motd = preg_replace('/&(amp;)?(sect[0-9a-f])/', 
    '</span><span class="$2">', $motd); 

快速演示在這裏與混合&&amp; - http://codepad.viper-7.com/12phow

有了這個,你還需要添加像你這樣的樣式表

.sect0 { color: #000; } 
.sect1 { color: #00A; } 
.sect2 { color: #0A0; } 
/* etc */ 
+0

感謝您的答案,但我試過了,它再次工作但是不是數據庫,你知道在寫入html文檔時,除了&以外的東西是否會改變嗎?有沒有辦法看到純代碼? – mongy910 2013-04-05 03:06:07

+0

@ mongy910你需要提供* actual * value from your database。查看頁面的源代碼(如右鍵單擊 - >查看源代碼)以獲取原始HTML值 – Phil 2013-04-05 03:07:26

+0

該頁面的查看源只是說「&sectcWelcome to&sectbSkyBlock&sectc!」它似乎沒有給出原始價值 – mongy910 2013-04-05 03:11:09

0

我有一個類似的問題,並通過使用

mysqli_set_charset($con,'utf8'); 

右後

mysqli_connect