| 

.NET C# Java Javascript Exception

5
Ich importiere Textdateien in meine Webseite, die über Zeilenvorschübe übersichtlich formatiert sind. Lese ich den Text ein und übernehme ich diesen in HTML-Seiten, gehen diese Informationen jedoch verloren. Gibt es einen Weg, die in den Textdateien verwendeten Zeilenvorschübe/Wagenrückläufe auch in der HTML-Darstellung sichtbar zu machen (z.B. per Java- oder VBScript)?
News:
01.11.2011
GeorgR. 21 2
2 Antworten
1
Hallo

Bezogen auf PHP meint der Vorredner den Befehl nl2br (siehe hier).

Die Antwort darauf, ob dir das zur Verfügung steht wäre tatsächlich ganz hilfreich.
Prinzipiell funktioniert es aber auch clientseitig per js. Da stellt sich allerdiungs die Frage nach dem Sinn.

Wie dem auch sei, zuerst eine kurze Erklärung:
HTML ist eine Auszeichnungssprache, was nichts anderes bedeutet, als dass die Struktur eines in HTML verfassten Dokuments ausschließlich durch die in der Sprache angebotenen Auszeichnungselemente bestimmt wird.
Das sind bei HTML die klassischen Tags (<a></a>, <p></p>, <br/> etc.)

Alle anderen strukturgebenen Informationen im Text selbst (Zeilenumbrüche oder Vorschübe) werden ignoriert. Ebenso auch alle weiteren Leerzeichen, die direkt auf ein erstes folgen.

Um solche, quasi dem quellcode Struktur gebende Zeichen sichtbar zu machen, musst du sie finden und durch tatsächliche Auszeichnungselemente ersetzen.

Der Befehl nl2br sucht nach zeichenfolgen wie "\r\n", die einen Zeilenumbruch bedeuten und ersetzt sie durch die Zeichenfolge "<br/>", um einen echten Zeilenumbruch in hTML zu erzeugen.

Mit den Tabs ist das etwas schwieriger. Das Prinzip ist aber das Gleiche:
Das Steuerzeichen für einen Vorschub ("\t") muss ersetzt werden durch eine äquvalente HTML-Auszeichnung. Die könnte hier ein leerer Span sein, mit einem Margin an der rechten Seite:

<span class="tab">&nbsp;</span>


Wäre das Element tatsächlich leer, würde sich jedes Validation Tool beschweren. Deshalb dort ein nicht umbrechendes Leerzeichen.

In der css Klasse "tab" kann nun bestimmt werden, wie groß die Einrückung sein soll. Entweder als absolute Angabe (zb 13px) oder, was ich vorziehen würde, als Angabe relativ zur aktuellen Schriftgröße (zb 1em):

span.tab
{
margin-right:1em;
}


Und nun gilt es die Ersetzung vorzunehmen.
Nehmen wir an wir übergeben eine variable "html", dann könnte das in php so aussehen:

$html = str_replace ("\t", '<span class="tab">&nbsp;</span>', $html);


Oder in JS:
html = html.replace (/\t/, '<span class="tab">&nbsp;</span>');


Mittels PHP würde man $html dann an der entsprechenden Stelle ausspucken oder mit JS per innerHTML in ein element schreiben.

Einen Nachteil hat das Prozedere: Es ist nur "sinnvoll" einsetzbar für Tabs die am Anfang einer Zeile stehen, bzw. für solche, die die komplette Breite eines Tabs besitzen.

Hat man in der Zeile Einrückungen, beispielsweise um in einer txt eine Tabellenstrucktur zu erzeugen, so funktioniert dieses Vorgehen nicht, da dort die Tabs oft unterschiedlich viel Raum einnehmen.

Wenn du tatsächlich einen Inhalt 1 zu 1 wiedergeben möchtest, kannst du den in ein HTML-Element namens <pre></pre> einbetten, das Tabs und Zeilenumbrüche nicht wegformatiert. Darin funktionieren dann allerdings keine weiteren HTML-Auszeichnungen.

Wenn das ganze Dokument vorformatiert ausgespuckt werden soll, dann solltest du einfach den header gemäß einer txt-Datei setzen:

header("Content-Type: text/plain");


Beste Grüße
Huckepick
01.11.2011
huckepick 887 2 8
0
Ersetze nach dem Lesen die Zeilenvorschübe der Textdateien durch ein <br />
01.11.2011
Joachim 3,1k 4 9

Stelle deine Javascript-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH