[Code]-Tags: Leerzeichen am Ende jeder Zeile

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
.:.xelo.:.
Mitglied
Beiträge: 7
Registriert: 25.07.2006 15:02

[Code]-Tags: Leerzeichen am Ende jeder Zeile

Beitrag von .:.xelo.:. »

Hallo zusammen,

seit ca. 2 Wochen bin ich auf der Suche nach einer Lösung für folgendes Problem...
(Vorab möchte ich sagen, dass ich bereits bei phpbb.com, phpbbstyles.com, phpbbhacks.com und in diversen anderen Foren dieses Problem beschrieb, aber leider keinerlei (zufriedenstellende) Antworten bekam)

Und zwar geht es um das Leerzeichen am Ende jeder Zeile in allen Postings der phpBB-Boards und um die Code-Tags im speziellen.

Ein Beispiel zu Demonstrationszwecken:

Code: Alles auswählen

if (x = y)
{
   echo x ist gleich y
} {
   if (x > y)
   {
      echo x ist größer als y
   } {
      echo x ist kleiner als y
   }
}
Wenn man nun obiges Code-Segment mit der Maus markiert, kopiert und in einem Editor einfügt, wird man feststellen, dass hinter jeder Zeile (mit Ausnahme der letzten Zeile) ein Leerzeichen angehangen wurde, obwohl ich es nicht eingegeben habe.
Das kann jeder selber in jedem beliebigen phpbb-Forum testen.

Leider beschäftigt sich mein Forum mit einer Scriptsprache, welche sehr anfällig gegen Leerzeichen am Zeilenende ist und wir benötigten sehr lange, festzustellen, warum alle herauskopierten Codes plötzlich nicht mehr funktionierten.

Meine Frage ist also, wie bekomme ich dieses Leerzeichen am Zeilenende weg?

Natürlich kann man die Leerzeichen in einem Editor entfernen,...
...oder man kann das Script als Attachment anhängen zum Download...
Alles schön und gut, aber ernsthaft, wer macht ein 10-Zeilen-Script als Anhang?
Und wie oft soll ich meinen Mitgliedern sagen, dass sie im Editor das Leerzeichen entfernen sollen, bevor sie den Code benutzen?

Also... IMHO sollten wenigstens die BBCode-Code-Tags den Code exakt so lassen, wie er ist und nicht ein Leerzeichen anfügen und ihn damit verändern.
Aus meiner Sicht ist der praktische Nutzen der Code-Tags verfehlt, wenn der Code verändert wird, und sei es nur durch so eine Kleinigkeit.

Also bitte leute, ich flehe Euch an :D :D :D
Helft mir bitte, dieses "Monster" loszuwerden (ich hab schon Alpträume deswegen)

Was mich wundert, ist, dass dies anscheinend noch keinem auffiel, oder aber dass die meisten gängigen Scriptsprachen total unempfindlich dagegen zu sein scheinen.

In anderer Foren-Software, wie z.B. vBulletin, YaBB, MyBB, oder oder oder hat man dies nicht, und ich ziehe (zwangsweise) ernsthaft in Erwägung, umzusteigen, was ich sehr schade fände.

Ja, ich habe in der Suchfunktion geschaut und ja, ich habe gegoogelt (wie ein verrückter),... meine Freundin ist schon angenervt und witzelte wegen des Trennungsgrunds "Leerzeichen" rum!
Bitte helft mir, dass es beim Witzeln bleibt.

Es kann doch nicht so kompliziert sein, sich dieses Leerzeichens zu entledigen. Leider reichen meine PHP-kenntnisse nicht aus, um selber für Abhilfe zu schaffen. :oops:

Vielen Dank (auch wenn du mir nicht helfen kannst)

.:.xelo.:.
Benutzeravatar
FatFreddy
Mitglied
Beiträge: 1937
Registriert: 25.07.2004 15:52
Kontaktdaten:

Beitrag von FatFreddy »

Bin mir nicht sicher, aber mag es eventuell an den folgenden beiden Zeilen aus der bbcode.php liegen?

Code: Alles auswählen

	$message = eregi_replace("\n"," ",$message);
	$message = eregi_replace("\r"," ",$message);

FatFreddy
Watch out where the huskies go, don't you eat the yellow snow...
Mehr dazu im Reiseforum InselTalk.de.
Tupperdosensucher schauen ins Geocachingforum.
Benutzeravatar
.:.xelo.:.
Mitglied
Beiträge: 7
Registriert: 25.07.2006 15:02

Beitrag von .:.xelo.:. »

FatFreddy hat geschrieben:

Code: Alles auswählen

	$message = eregi_replace("\n"," ",$message);
	$message = eregi_replace("\r"," ",$message);
Öhm... diese zeilen hab ich garnicht in meiner v2.0.16 in /includes/bbcode.php

Watch out where the huskies go, don't you eat the yellow snow...
...and the husky weewee, i mean the doggy weewee has blinded me... temporarily :D
Benutzeravatar
FatFreddy
Mitglied
Beiträge: 1937
Registriert: 25.07.2004 15:52
Kontaktdaten:

Beitrag von FatFreddy »

.:.xelo.:. hat geschrieben:
Öhm... diese zeilen hab ich garnicht in meiner v2.0.16 in /includes/bbcode.php
Oops! Sorry, aber dann bin ich überfragt. Mir fehlt die alte Version zum vergleichen.
BTW: Du solltest dringendst updaten. Es gibt mehrere gravierende Sicherheitslücken in den Versionen vor 2.0.21.
.:.xelo.:. hat geschrieben:
Watch out where the huskies go, don't you eat the yellow snow...
...and the husky weewee, i mean the doggy weewee has blinded me... temporarily :D
Wise man said: "Keep clear of leaky pets." :D

FatFreddy
Watch out where the huskies go, don't you eat the yellow snow...
Mehr dazu im Reiseforum InselTalk.de.
Tupperdosensucher schauen ins Geocachingforum.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Sorry, aber wie wäre es, wenn Du erst einmal Dein Board auf den neuesten Stand bringst (und somit die Sicherheit erheblich erhöhst), bevor Du anfängst Erbsen zu zählen?

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Benutzeravatar
.:.xelo.:.
Mitglied
Beiträge: 7
Registriert: 25.07.2006 15:02

Beitrag von .:.xelo.:. »

@cYbercOsmOnauT
Danke für den <ironic>guten</ironic> Tip aber leider ist mir damit nicht geholfen.
cYbercOsmOnauT hat geschrieben: bevor Du anfängst Erbsen zu zählen?
Für manche mögen es Erbsen sein, für andere jedoch ist es die "längste Praline der Welt", oder anders ausgedrückt, ein Grund, die Forensoftware zu wechseln.
Bevor ich weiterhin erheblich Zeit investiere, möchte ich dieses Problem beseitigt wissen und da fange ich garantiert nicht an, vorher weiterhin Mühen in phpBB zu investieren.
Wie ich schon andeutete, halte ich dies für einen Bug und ich finde, dass das Urteilen über die Schwere dieses Bugs jedem selber überlassen bleiben sollte.
Wenn du (cYbercOsmOnauT) das in diesem Falle nicht so eng siehst, ist das schön für dich und du kannst dir ja die Mühen sparen, auf "Erbsenzähler" wie mich zu antworten.

.:.x.:.
BlindGuard666
Mitglied
Beiträge: 40
Registriert: 05.06.2006 11:32

Beitrag von BlindGuard666 »

Tach!

Ich muss diesen Thread grade mal nach oben holen, da ich GENAU das Selbe Problem habe.

Also ich hab ein bisschen rumgespielt und bemerkt, dass der FireFox die Leerzeichen zwar beim markieren anzeigt, aber nicht mitkopiert. Der IE und Opera fügt sie allerdings ein, was mehr als lästig ist. :-(

Ich habe jetzt schon in der templates/bbcode.tpl ein bisschen rumeditiert und war in der Hoffnung, dass man vllt mit dem <pre> Tag was reißen könnte. Ich hab's auch hinbekommen, dass es in jedem Browser gut aussieht. Und zwar habe ich darinnen die normale Code Funktion mit diesem hier ersetzt:

Code: Alles auswählen

<!-- BEGIN code_open --></span>
<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center">
<tr> <td><span class="genmed"><b>{L_CODE}:</b></span></td></tr>
<tr>
	<td><pre style="font-family: Courier, 'Courier New', sans-serif; font-size: 7px; line-height: 0.8; color: #006600; background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px">
			<!-- END code_open --><!-- BEGIN code_close --></pre>
	</tr></td></table>
<span class="postbody"><!-- END code_close -->
Ich weiß, dass es nicht sonderlich sauber ist, aber es funktioniert (fast!).

Das Problem ist jetzt, dass er zwar keine Leerzeichen am Ende jeder Zeile hinzufügt, dafür ist jetzt nach jeder Zeile im Code ein <br /> und somit eine (im FireFox sogar 2) Leerzeile zwischen jeder Zeile.
Diese Zeile sieht man nicht im Browser, aber wenn man es rauskopiert und in zB Notepad einfügt ist da immer eine Leerzeile... Also nicht wirklich optimal :-(

Irgendeine Idee, wie ich das sonst in den Griff kriegen könnte? Ich bestehe jetzt nicht auf meine <pre>-Lösung, da die wirklich ziemlich unfein ist. Also BITTTEEE! Helft mir diese überflüssigen Leerzeichen wegzubekommen :cry:

Danke schon mal,
BlindGuard
(Ach ja, ich hab die aktuelle phpBB-Version ;-))
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Finde in viewtopic.php:

Code: Alles auswählen

         $message = str_replace("\n", "\n<br />\n", $message);
ersetze gegen:

Code: Alles auswählen

         $message = str_replace("\r", "", $message);
         $message = nl2br($message);
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
BlindGuard666
Mitglied
Beiträge: 40
Registriert: 05.06.2006 11:32

Beitrag von BlindGuard666 »

Jaaa!! Es funzt!

Great! Danke! Ich hatte schon versucht in der BBCode.php irgendwas bei dem [C0DE] Teil zu ändern

Code: Alles auswählen

function bbencode_second_pass_code($text, $uid, $bbcode_tpl)
{
	global $lang;

	$code_start_html = $bbcode_tpl['code_open'];
	$code_end_html =  $bbcode_tpl['code_close'];

	// First, do all the 1st-level matches. These need an htmlspecialchars() run,
	// so they have to be handled differently.
	$match_count = preg_match_all("#\[code:1:$uid\](.*?)\[/code:1:$uid\]#si", $text, $matches);

	for ($i = 0; $i < $match_count; $i++)
	{
		$before_replace = $matches[1][$i];
		$after_replace = $matches[1][$i];
				
		// Replace 2 spaces with "&nbsp; " so non-tabbed code indents without making huge long lines.
		$after_replace = str_replace("  ", "&nbsp; ", $after_replace);
		// now Replace 2 spaces with " &nbsp;" to catch odd #s of spaces.
		$after_replace = str_replace("  ", " &nbsp;", $after_replace);

		// Replace tabs with "&nbsp; &nbsp;" so tabbed code indents sorta right without making huge long lines.
		$after_replace = str_replace("\t", "&nbsp; &nbsp;", $after_replace);

		// now Replace space occurring at the beginning of a line
		$after_replace = preg_replace("/^ {1}/m", '&nbsp;', $after_replace);
				
		$str_to_match = "[code:1:$uid]" . $before_replace . "[/code:1:$uid]";

		$replacement = $code_start_html;
		$replacement .= $after_replace;
		$replacement .= $code_end_html;

		$text = str_replace($str_to_match, $replacement, $text);
	}

	// Now, do all the non-first-level matches. These are simple.
	$text = str_replace("[code:$uid]", $code_start_html, $text);
	$text = str_replace("[/code:$uid]", $code_end_html, $text);
Aber irgndendwie hab ich's da nicht geschafft die /n anzusprechen...

So funzts jetzt aber. Vielen Dank.

Also ich bin ja der Meinung, dass man diesen "Mod" in das normale PHPBB einbinden sollte, da es sich ja eigentlich um einen "Bug" handelt.

Also nochmals Danke Miriam :-D

Bye,
BG
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Naja, es ist kein Bug im eigentlichen Sinne, sondern letztendlich der Wagenrücklauf ( \r ) bzw. die neue Zeile ( \n ).

Im Prinzip braucht das HTML nicht, da wird <br /> benutzt..... dafür sieht jetzt aber Dein Quelltext nicht mehr so schön aus: Es ist alles in einer Zeile geschrieben. :P
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“