1

我对应该是一个非常简单的 str_replace 函数感到困惑。在我的数据库中,我有一个我的世界服务器 motd(当天的消息)的字段。当我从服务器收集数据时,我将包括 motd 在内的数据存储在我的数据库中。

服务器可以通过添加颜色代码来为 motds 着色,我将其作为 § 存储在数据库中,然后是指定颜色的数字。我正在尝试使用 str_replace 将 §number 转换为具有实际颜色的 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() ,但似乎没有任何效果。

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

谢谢。

4

2 回答 2

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 */
于 2013-04-05T02:59:53.110 回答
0

我有一个类似的问题并通过使用修复它

mysqli_set_charset($con,'utf8'); 

紧接着

mysqli_connect
于 2016-02-12T19:07:17.060 回答