Convertisseur codes couleur et style sh (tty) en html

Contenu du snippet

Permet d'afficher en html le retour d'une appli linux qui utilise les couleurs avec des codes TTY.

Infos utilisées: (prises dans le code de eApp, une base de serveur MMORPG)

// \033[#;...;#m - Set Graphics Rendition (SGR)
//
// printf("\x1b[1;31;40m"); // Bright red on black
// printf("\x1b[3;33;45m"); // Blinking yellow on magenta (blink not implemented)
// printf("\x1b[1;30;47m"); // Bright black (grey) on dim white
//
// Style Foreground Background
// 1st Digit 2nd Digit 3rd Digit RGB
// 0 - Reset 30 - Black 40 - Black 000
// 1 - FG Bright 31 - Red 41 - Red 100
// 2 - Unknown 32 - Green 42 - Green 010
// 3 - Blink 33 - Yellow 43 - Yellow 110
// 4 - Underline 34 - Blue 44 - Blue 001
// 5 - BG Bright 35 - Magenta 45 - Magenta 101
// 6 - Unknown 36 - Cyan 46 - Cyan 011
// 7 - Reverse 37 - White 47 - White 111
// 8 - Concealed (invisible)

Source / Exemple :


<?

$cmd="ls -l --color=yes /dev";

// WARNING: Décommenter la ligne suivante peut être dangereux si votre serveur est publique !!!
// if(!empty($_GET["cmd"])) $cmd=$_GET["cmd"];

?>
<html><head><title>Test couleurs - <? echo $cmd; ?></title></head>
<body bgcolor="#000000" text="#FFFFFF"><p><pre>
<?

exec($cmd,$out);

foreach($out as $line)
{
	$close = "";
	$mode_start = "";
	$mode_end = "";
	$line = explode("\033",$line);
	foreach($line as $bloc)
	{
		if(substr($bloc,0,1)!="[")
		{
			echo $mode_start.$bloc.$mode_end;
			continue;
		}
		$pos = strpos($bloc,"m");
		if($pos===FALSE)
		{
			echo substr($bloc,3);
			continue;
		}
		if(!empty($close)) echo $close;
		$font=false;
		$code = substr($bloc,1,$pos);
		$texte = substr($bloc,$pos+1);
		if($code=="0m" || $code=="m")
		{ // RESET
			$mode_start = "";
			$mode_end = "";
			echo $texte;
			continue;
		}
		$code = explode(";",substr($code,0,strlen($code)-1));
		foreach($code as $c)
		{
			if($c<10)
			{
				switch($c)
				{
					case 0: // Reset
						$mode_start = "";
						$mode_end = "";	
						break;
					case 1: // FG Bright
						$mode_start = "<b>";
						$mode_end = "</b>";	
						break;
					case 2: // ???
						$mode_start = "";
						$mode_end = "";	
						break;
					case 3: // Blink
						$mode_start = "<blink>";
						$mode_end = "</blink>";	
						break;
					case 4: // Underline
						$mode_start = "<u>";
						$mode_end = "</u>";	
						break;
					case 5: // BG Bright [REMPLACE PAR I CAR RIEN TROUVE D'AUTRE]
						$mode_start = "<i>";
						$mode_end = "</i>";	
						break;
					case 6: // ???
						$mode_start = "";
						$mode_end = "";	
						break;
					case 7: // Reverse [NOT SUPPORTED]
						$mode_start = "";
						$mode_end = "";	
						break;
					case 8: // Concealed
						$mode_start = "<span style=\"visibility: hidden;\">";
						$mode_end = "</span>";	
						break;
				}
			}
			else if($c>29 && $c<40)
			{
				echo "<font color=\"#".id_to_hex($c-30)."\">";
				$close="</font>".$close;
			}
			else if($c>39 && $c<50)
			{
				echo "<span style=\"background: #".id_to_hex($c-40).";\">";
				$close="</span>".$close;
			}
		}

		echo $mode_start.$texte.$mode_end;
	}
	if(!empty($close)) echo $close;
	echo "<br/>\n";
}

function id_to_hex($id)
{
	switch($id)
	{
		case 0: return "000000";
		case 1: return "FF0000";
		case 2: return "00FF00";
		case 3: return "FFFF00";
		case 4: return "0000FF";
		case 5: return "FF00FF";
		case 6: return "00FFFF";
		case 7: return "FFFFFF";
		default: return "EEEEEE"; // Erreur
	}
}

?>
</pre></p></body></html>

Conclusion :


Morceau de code réalisé pour une petite interface d'admin web perso.

J'avait cherché un tel code sur CS puis internet mais je n'avait rien trouvé. J'ai donc codé mon parseur et je le poste au cas où ca pourrait servir à d'autres...

Je sais qu'il existe d'autres codes de style, principalement pour le déplacement du curseur et l'éffacement, mais il sont bcps plus durs à reproduire en html.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.