str_replace无法处理数据库返回

时间:2013-04-05 02:48:51

标签: php mysql string str-replace

我很难被一个非常简单的str_replace函数所困扰。 在我的数据库中,我有一个用于Minecraft服务器motd的字段(当天的消息)。当我从服务器收集数据时,我将数据存储在我的数据库中。

服务器可以通过添加颜色代码来对颜色进行着色,我已将其存储在数据库中作为& sect,然后是指定颜色的数字。我正在尝试使用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 = $server_data['motd'];

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

这是存储在数据库中的,它完美地运行。没有str_replaces,这两个变量看起来完全一样。我甚至使用gettype()检查了每个变量的类型  它们都是字符串。我也在数据库结果上尝试了utf_decode(),但似乎没有任何效果。

数据库结果与我刚输入的字符串有什么区别吗?我不知道它是什么,但显然必须有一个。

感谢。

2 个答案:

答案 0 :(得分: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 */

答案 1 :(得分:0)

我有一个类似的问题,并使用

修复它
mysqli_set_charset($con,'utf8'); 

之后

mysqli_connect