Text in HTML konvertieren
razors
- html
Hallo,
ich suche eine Möglichkeit Text in HTML zu konvertieren. Einige Programme (z.B. kompozer) können das, ich suche allerdings eine "vereinfachte" Variante. Am liebsten einen Code, den ich als html Datei abspeichern kann und in meinen Browser schmeiße. Ich möchte gerne ein Eingabefeld haben, in dem ich meinen Text einfüge, z.B.:
Text Text Text
Text Text Text Text Text
Text Text
dann möchte ich gerne einen Button drücken und folgendes sollte ausgeschmissen werden:
Text Text Text<br>
Text Text Text Text Text<br>
<br>
Text Text
Leider konnte ich keinen passenden Code über google finden. Kann mir jemand weiterhelfen? Ich bin da leider nicht versiert drin.
Gruß
razors
Hi,
ich suche eine Möglichkeit Text in HTML zu konvertieren. Einige Programme (z.B. kompozer) können das, ich suche allerdings eine "vereinfachte" Variante. Am liebsten einen Code, den ich als html Datei abspeichern kann und in meinen Browser schmeiße.
Das kann dein Browser aber nicht.
Ich möchte gerne ein Eingabefeld haben, in dem ich meinen Text einfüge, z.B.:
Text Text Text
Text Text Text Text TextText Text
Wenn du den Text genau so dargestellt bekommen möchtest, es dir also vornehmlich um den Whitespace geht - dann nimm <pre> oder ein entsprechend per CSS formatiertes Element, in das du den Inhalt reinpackst.
dann möchte ich gerne einen Button drücken und folgendes sollte ausgeschmissen werden:
Text Text Text<br>
Text Text Text Text Text<br>
<br>
Text Text
Dazu bräuchtest du eine Programmiersprache.
Leider konnte ich keinen passenden Code über google finden. Kann mir jemand weiterhelfen?
PHP kennt bspw. die Funktion nl2br, die jedem Zeilenumbruch ein BR hinzufügt.
Andere Sprachen haben sicher vergleichbares.
MfG ChrisB
Hallo ChrisB,
danke für deine schnelle Antwort. Ich hatte ähnliche Funktion mal gefunden, um doppelte Leerzeichen zu entfernen. Das war sehr komfortabel. Leider habe ich den Code nicht mehr, aber ich hatte das damals glaube ich als .php Datei abgespeichert und konnte diese Datei in meinem Browserfenster (per drag & drop) einfügen und damit arbeiten.
Wie funktioniert das mit nl2br genau?
Gruß
razors
Hi,
Wie funktioniert das mit nl2br genau?
Wie nl2br arbeitet, kannst du im Handbuch nachlesen: http://www.php.net/manual/en/function.nl2br.php
Wie du deinen Text aus der Textdatei in dein Script bekommst, wäre die nächste Frage. file_get_contents wäre eine Möglichkeit dazu. (Auch im Manual nachlesen.)
Wenn du bei der Umsetzung noch Probleme hast, dann solltest du vielleicht zunächst ein Einsteiger-Tutorial zum Thema PHP durcharbeiten.
MfG ChrisB
Hi,
ja, wenn ich die Zeit hätte und nicht 6500 Texte (kein Scherz) mit diesem besch*** <br> versehen müsste, dann würde ich das glatt tun ;). Ich hatte gehofft, dass dieser Code bei jemandem auf der Platte schlummert und er diesen posten könnte, aber dann bleibt mir wohl weiterhin nur der kompozer.
Trotzdem danke für deine Hilfe!
Grüße
razors
Hi razors,
hab grade eher zufällig dein thema gesehen, und bin mir unsicher, ob ich dir vielleicht etwas anbieten könnte. tatsächlich bin ich grade dabei, mir ein wenig javascript beizubringen, und da habe ich als eine der ersten mir selbst gestellten aufgaben mal versucht ein text-html-konvertierungsprogramm zu schreiben. das hab ich jetzt mal eben noch um die einfügung des <br />-tags erweitert. wenn du die XHTML-Schreibweise explizit nicht willst, musst du nur in Zeile 80 das "<br />" durch "<br>" ersetzen.
Probier's mal aus. Hier ist der vollständige Code für ein .html dokument:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>Convert Text to HTML-Entities</title>
<style type="text/css">
html, body {
height:100%;
}
body {
background-color: #fff9cd;
margin: 30px;
font-family: arial, sans-serif;
font-size: 12px;
}
textarea {
background-color: #fcfcfc;
border: 1px solid grey;
font-size: 12px;
padding: 5px;
}
div {
float:left;
margin: 0px 10px 10px 0px;
}
.feld {
width: 430px;
}
.button {
width: 100px;
padding-top: 126px;
font-weight: bold;
text-align: center;
}
#feste_breite {
width: 1070px;
height: 470px;
}
</style>
<script type="text/javascript">
function tohtmlentities() {
var text = document.textfeld.text_in.value;
var laenge = text.length;
document.textfeld.text_laenge.value = laenge;
var neu = "";
for (var i = 0; i <= laenge; i++) {
var zeichen = text.charAt(i);
switch(zeichen) {
case 'ä' : zeichen = "ä"; break;
case 'Ä' : zeichen = "Ä"; break;
case 'ö' : zeichen = "ö"; break;
case 'Ö' : zeichen = "Ö"; break;
case 'ü' : zeichen = "ü"; break;
case 'Ü' : zeichen = "Ü"; break;
case 'ß' : zeichen = "ß"; break;
case '&' : zeichen = "&"; break;
case '<' : zeichen = ">"; break;
case '>' : zeichen = "<"; break;
case '"' : zeichen = """; break;
case '–' : zeichen = "—"; break;
case 'à' : zeichen = "à"; break;
case 'À' : zeichen = "À"; break;
case 'á' : zeichen = "á"; break;
case 'Á' : zeichen = "Á"; break;
case 'é' : zeichen = "é"; break;
case 'É' : zeichen = "É"; break;
case 'è' : zeichen = "è"; break;
case 'È' : zeichen = "È"; break;
case '\u000A' : zeichen = "<br />\n"; break;
}
neu += zeichen;
}
document.textfeld.text\_out.value = neu;
document.textfeld.text\_out\_laenge.value = neu.length;
}
function html_to_text() {
var text = document.textfeld.text_in.value;
var laenge = text.length;
document.textfeld.text_laenge.value = laenge;
var neu = "";
for (var i = 0; i <= laenge; i++) {
var zeichen6 = text.substr(i,6);
var zeichen7 = text.substr(i,7);
var zeichen5 = text.substr(i,5);
var zeichen4 = text.substr(i,4);
var zeichen8 = text.substr(i,8);
switch(zeichen6) {
case "ä" : zeichen6 = "ä" ; break;
case "Ä" : zeichen6 = "Ä" ; break;
case "ö" : zeichen6 = "ö" ; break;
case "Ö" : zeichen6 = "Ö" ; break;
case "ü" : zeichen6 = "ü" ; break;
case "Ü" : zeichen6 = "Ü" ; break;
case """ : zeichen6 = '"' ; break;
}
switch(zeichen7) {
case "ß" : zeichen7 = "ß" ; break;
case "—" : zeichen7 = '–' ; break;
}
switch(zeichen4) {
case ">" : zeichen4 = "<" ; break;
case "<" : zeichen4 = ">" ; break;
}
switch(zeichen8) {
case "à" : zeichen8 = 'à' ; break;
case "À" : zeichen8 = 'À' ; break;
case "á" : zeichen8 = 'á' ; break;
case "Á" : zeichen8 = 'Á' ; break;
case "é" : zeichen8 = 'é' ; break;
case "É" : zeichen8 = 'É' ; break;
case "è" : zeichen8 = 'è' ; break;
case "È" : zeichen8 = 'È' ; break;
}
if (zeichen5 == "&") zeichen5 = "&" ;
if (zeichen6.length == 1) {
zeichen = zeichen6;
i +=5;
}
else if (zeichen7.length == 1) {
zeichen = zeichen7;
i += 6;
}
else if (zeichen4.length == 1) {
zeichen = zeichen4;
i += 3;
}
else if (zeichen8.length == 1) {
zeichen = zeichen8;
i += 7;
}
else if (zeichen5.length == 1) {
zeichen = zeichen5;
i += 4;
}
else {zeichen = text.charAt(i);}
neu += zeichen;
}
document.textfeld.text\_out.value = neu;
document.textfeld.text\_out\_laenge.value = neu.length;
}
</script>
</head>
<body>
<div id="feste_breite">
<form name="textfeld">
<div align="left">
<textarea name="text_in" cols="50" rows="30"></textarea>
<br /><br /><br />
Zeichenanzahl: <input type="text" name="text_laenge" size="4" value="" readonly />
</div>
<div class="button">
<button type="button" onclick="tohtmlentities()">convert >></button><br />Text<br />to <br />HTML-<br />Entities<br /><br /><br />
<button type="button" onclick="html_to_text()">convert >></button><br />HTML<br />to <br />Text
</div>
<div align="left">
<textarea name="text_out" cols="50" rows="30"></textarea>
<br /><br /><br />
Zeichenanzahl: <input type="text" name="text_out_laenge" size="4" value="" readonly />
</div>
</form>
</div>
</body>
Hallo,
deine Initiative und Mühe in allen Ehren, aber ...
switch(zeichen) {
case 'ä' : zeichen = "ä"; break;
[...]
case 'è' : zeichen = "è"; break;
case 'È' : zeichen = "È"; break;
warum willst du den Text derart verstümmeln? Ich gehe doch davon aus, dass du für deine (X)HTML-Dokumente eine Zeichencodierung verwendest, die die Notation von Zeichen außerhalb des ASCII-Bereichs im Klartext erlaubt. Sie dennoch durch ihre Entity-Referenzen zu ersetzen, ist eine mutwillige Verschlechterung der Lesbarkeit.
case '\u000A' : zeichen = "<br />\n"; break;
Das ist das einzige, was hier anscheinend verlangt wurde.
Übrigens solltest du noch der weiten Verbreitung von Windows Rechnung tragen und entweder "\r" (0x0D) bei der Gelegenheit unter den Tisch fallen lassen, oder aber "\r\n" durch "<br />\r\n" ersetzen und "\n" durch "<br />\n", wenn die Darstellung der Zeilenumbrüche systemkonform bleiben soll.
function html_to_text() {
[...]
switch(zeichen6) {
case "ä" : zeichen6 = "ä" ; break;
[...]
case """ : zeichen6 = '"' ; break;
Bei der Rückwandlung mag es sinnvoll sein, Entity-Referenzen aufzulösen, falls jemand unnötigerweise welche verwendet haben sollte.
Dein Algorithmus zur Ersetzung ist allerdings ausgesprochen kompliziert.
So long,
Martin
Yo, danke der Hinweise. Totaler Anfängerkram halt, wie gesagt.
Übrigens solltest du noch der weiten Verbreitung von Windows Rechnung tragen und entweder "\r" (0x0D) bei der Gelegenheit unter den Tisch fallen lassen, oder aber "\r\n" durch "<br />\r\n" ersetzen und "\n" durch "<br />\n", wenn die Darstellung der Zeilenumbrüche systemkonform bleiben soll.
good point!
aber jedenfalls wäre das doch ein ansatz für die ausgangsfrage, oder?
best, s.
Ich hatte gehofft, dass dieser Code bei jemandem auf der Platte schlummert [...]
Einen 3-Zeiler - das ist nicht dein Ernst[1].
und er diesen posten könnte [...]
Auch wenn jemand so einen Schnipsel hätte, würde er ihn wahrscheinlich nicht unreflektiert posten - wär ja noch schöner, dir kostenlos derart banale Arbeit abzunehmen die du womöglich dann irgendjemandem teuer als deine verscherbelst ;)
6500 Texte mit <br> bei einem Zeilenumbruch versehen[2] gegenüber ein Tuturial durcharbeiten. Für mich wäre die Entscheidung klar.
[1] nein, das ist der Franz - der hat nur die Haube vom Ernst auf.
[2] ich befürchte fast, dass du über einen primitiven Editor verfügst und das per Hand machst anstatt sämtliche CRLF, CR oder LF Dateiübergreifend durch ein <br> zu ersetzen - was einen Aufwand von etwa 5 Minuten bedeutet.
danke für deine schnelle Antwort. Ich hatte ähnliche Funktion mal gefunden, um doppelte Leerzeichen zu entfernen. Das war sehr komfortabel. Leider habe ich den Code nicht mehr, aber ich hatte das damals glaube ich als .php Datei abgespeichert und konnte diese Datei in meinem Browserfenster (per drag & drop) einfügen und damit arbeiten.
Wie funktioniert das mit nl2br genau?
Bau dir in HTML eine <form> mit Input Feld, die dann an ein PHP Skript von dir weitergeleitet wird. In diesem Skript liest du dann den Inhalt des Input Feldes mit $text = $_POST['text']; aus. Anschließend lässt du mit nl2br($text) und htmlentities($text) sämtliche Zeilenumbrüche und Sonderzeichen in HTML Code übersetzen. Anschließend kannst du mit echo $text dir das ganze auf dem Bildschirm ausgeben lassen und dann einfach den Quellcode, der dir erzeugt wurde abspeichern.
Yuzuke