Seite 1 von 2

[Code]-Tags: Leerzeichen am Ende jeder Zeile

Verfasst: 29.07.2006 19:22
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.:.

Verfasst: 29.07.2006 20:52
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

Verfasst: 29.07.2006 22:00
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

Verfasst: 30.07.2006 16:07
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

Verfasst: 30.07.2006 16:12
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

Verfasst: 30.07.2006 18:50
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.:.

Verfasst: 09.01.2007 12:42
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 ;-))

Verfasst: 09.01.2007 19:50
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);

Verfasst: 10.01.2007 11:50
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

Verfasst: 10.01.2007 16:36
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