<?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 ein "Käschtle" um seinen Text haben möchte, 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;
?>
Dieses PHP Snippet soll in erster Linie als Beispiel und Anregung für eigene Bemühungen dienen.
Gerne darf man es für Projekte aller Art benutzen.
Möchte jemand das Snippet also solches in ähnlicher oder anderer Form veröffentlichen ist ein kleiner Hinweis auf simplecontent.net nicht zuviel verlangt oder Herr Koch?
Für die Abwesenheit von Fehlern kann natürlich keine Gewähr gegeben werden.