Wenn man ein "Käschtle" um seinen Text haben möchte, geht das sehr einfach.
Das wird gerne für Readme-Dateien, E-Mails und ähnliches benutzt.
Auch wenn es natürlich ohne jeden praktischen Nutzen ist.
Es sieht halt etwas netter aus (Geschmackssache).
<?php
/**
* Einen Text mit einem Zeichen umrahmen
*/
function TextBox($text, $char = '#', $maxwidth = 0, $usemax = true)
{
// die "Deko"-Elemente für Zeilenanfang und Ende
$left_char = $char.' ';
$right_char = ' '.$char;
// Hier ggf. eigene Varianten nutzen
// Gesamtbreite der Deko-Elemente ermiteln
$chars_width = strlen($left_char) + strlen($right_char);
// newline Zeichen
$nl = "\n";
// Tab-Stops durch Leerzeichen ersetzen
$tab = str_repeat(' ', 8);
$text = str_replace("\t", $tab, $text);
// die maximale Zeilenbreite im Text ermitteln
$max = max(array_map('strlen', explode ("\n", $text))) + $chars_width;
// welche Breite soll genutzt werden?
//
// $maxwidth = 0, dann Breite = maximal genutzte Breite ($max)
// $usemax = true, dann Breite = $maxwidth
// $usemax = false, dann Breite = maximal genutzte ...
// ... Breite ($max), aber höchstens maxwidth
if ((!$usemax && $max < $maxwidth) || $maxwidth == 0){
$maxwidth = $max;
}
$starline = str_repeat($char, $maxwidth);
$lines = array();
$lines[] = $starline;
$textwidth = $maxwidth - $chars_width;
$text = str_replace("\r", '', $text);
$new_text = wordwrap($text, $textwidth, "\n", 1);
$tmp = explode ("\n", $new_text);
foreach ($tmp as $s){
$s = trim($s);
$l = strlen($s);
$lines[] = $left_char.$s.str_repeat(' ', $textwidth-$l).$right_char;
}
$lines[] = $starline;
$new = join ($nl, $lines);
return $new;
}
if (isset($_POST['msg']) && !empty($_POST['msg'])){
$_POST['msg'] = get_magic_quotes_gpc()
? stripslashes($_POST['msg'])
: $_POST['msg'];
$width = intval($_POST['width']);
$char = $_POST['char'];
echo '<pre>'.TextBox($_POST['msg'], $char, $width).'</pre>';
$msg = htmlentities($_POST['msg']);
}else{
$msg = <<< EOT
Das ist ein Beispiel
--------------------
Wenn man einen "Kasten" um seinen Text haben moechte, geht das sehr einfach.
Das wird gerne für Readme-Dateien, Emails und ähnliches benutzt.
Auch wenn es natürlich ohne jeden praktischen Nutzen ist.
Sieht halt etwas netter aus (Geschmackssache).
EOT;
}
echo <<< EOT
<form method="post" action="{$_SERVER['PHP_SELF']}">
<textarea name="msg" rows="10" cols="70">$msg</textarea>
<br/>
<select name="char">
<option>#</option>
<option>*</option>
<option>+</option>
<option>-</option>
</select>
<select name="width">
<option>80</option>
<option>70</option>
<option>60</option>
<option>50</option>
<option>40</option>
<option>0</option>
</select>
<input type="submit" value="abschicken">
</form>
EOT;
?>