1

Minecraft は特定の特殊文字を使用して、クライアント上で色付きの文字列をフォーマットします。これらのカラー コードを文字列から削除するだけでなく、文字列を適切な色でフォーマットしたいと考えています。カラーコードの例: '§1' と '§6' ここで完全なリストを見ることができます: http://www.minecraftwiki.net/wiki/Formatting_codes

クライアントからの生の文字列の例を次に示します。これが私がこれまでに持っているものであり、これを理解することはできません。

この結果を文字列として欲しいと思います:

<span style='color:#55555;'>here is the </span><span style='color:#FFAA00;'> message of the</span><span style='color:#55555;'> day</span>

私の機能:

function formatMOTD($motd) {
$result = array();
$previous;

$result = split("§1", $motd);
if (!empty($result)) {
    foreach ($result as $value) {
        $previous .= "<span style='color:#0000AA;'>" . substr($value, 1) . "</span>";
    }
}
$result = split("§8", $motd);
if (!empty($result)) {
    foreach ($result as $value) {
        $previous .= "<span style='color:#55555;'>" . substr($value, 1) . "</span>";
    }
}
$result = split("§6", $motd);
if (!empty($result)) {
    foreach ($result as $value) {
        $previous .= "<span style='color:#FFAA00;'>" . substr($value, 1) . "</span>";
    }
}

$motd = $previous;
return $motd;
}

ありがとう!

4

2 に答える 2

1

これはそれほどエレガントな解決策ではありませんが、機能します。より良い解決策は正規表現を使用することですが、これは私にとってはより簡単なので、楽しんでください。

    function spanParser($str, $htmlColor)
    {
        $str = "<span style='color:#" . $htmlColor .";'>" . $str . "</span>";
        return $str;
    }

    $exampleString = "§8here is the §6message of the §8day";
    $arrayOfChunks = explode('§', $exampleString);
    $formatedString = "";
    foreach($arrayOfChunks as $chunk)
    {
        switch($chunk[0])
        {
        case '6':
            $chunk = substr($chunk, 1);
            $formatedString = $formatedString . spanParser($chunk, "FFAA00");
            break;
        case '8':
            $chunk = substr($chunk, 1);
            $formatedString = $formatedString . spanParser($chunk, "55555");
            break;
        default:
            break;
        }
    }

    echo $formatedString;
?>
于 2013-02-13T18:49:15.530 に答える
0

正規表現を使用した別のソリューション:

$txt = "test §8here is the §6message of the §8day";
echo preg_replace_callback('/§(\d+)([^§]*)/s', 
    function($match)
    {
        $color = '';
        switch($match[1]) {
            case '1': 
                $color = '0000AA';
                break;
            case '6': 
                $color = 'FFAA00';
                break;
            case '8': 
                $color = '555555';
                break;
            default:
                break;
        }
        return "<span style='color:#" . $color .";'>" . $match[2] . "</span>";
    },
    $txt);

PHP 5.3以降のUPD。古いバージョンを使用している場合は、preg_replace_callback() 内の匿名関数の代わりに、create_function() またはユーザー定義関数を使用できます。

于 2013-02-13T19:05:56.967 に答える