• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

PHP: mysql_real_escape_string() - Problem

LemonDrops

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
543
@accC: Ja ist es. Die Alternative ist es mit einem Buffer zu arbeiten, wenn man das will, dann kann man das auch (Mit allen Nachteilen). Es macht keinen Sinn etwas sinnloses zu erzwingen. Es gibt auch keine sinvolle Alternative, die nichts macht außer zu beschränken.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Vielleicht von einem Anwendungsentwickler, der gezwungen ist, mit PHP zu arbeiten. Obwohl ich auch da nicht unbedingt von einer klugen Designentscheidung sprechen würde. Dass PHP in dieser Hinsicht klug designed wurde, kann man allerdings definitiv verneinen.
Eine andere Möglichkeit wäre dem Interpreter beizubringen, beim Einlesen einer Datei Leerzeichen/ Zeilenumbrüche/ etc am Dateiende bzw nach ?> automatischzu entfernen. Das wäre zumindest mal eine Option.
 

LemonDrops

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
543
Das ist keine Option, aus einem ganz einfachen Grund. Man würde eine bewusste Entscheidung (kein "?>" setzten) damit ersetzen, dass der Interpreter errät, was du möchtest. Muss man da noch erklären warum das schlecht ist�
 

SP4C3

Neu angemeldet

Registriert
27 Aug. 2013
Beiträge
54
Eine andere Möglichkeit wäre dem Interpreter beizubringen, beim Einlesen einer Datei Leerzeichen/ Zeilenumbrüche/ etc am Dateiende bzw nach ?> automatischzu entfernen. Das wäre zumindest mal eine Option.

Und was ist jetzt, wenn ich nach dem ?> bewusst Leerzeichen und Zeilenumbrüche setze...
Yeah noch mehr Raterei, Annahmen etc. pp. im PHP Interpreter...
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Das ist keine Option, aus einem ganz einfachen Grund. Man würde eine bewusste Entscheidung (kein "?>" setzten) damit ersetzen, dass der Interpreter errät, was du möchtest. Muss man da noch erklären warum das schlecht ist�
Bei einem definierten Verhalten, muss der Interpreter nicht raten..

Und was ist jetzt, wenn ich nach dem ?> bewusst Leerzeichen und Zeilenumbrüche setze...
Yeah noch mehr Raterei, Annahmen etc. pp. im PHP Interpreter...
Kannst du auch einen Fall nennen, in dem es wirklich nötig ist nach ?> ein Leerzeichen zu setzen?
Was passiert denn, wenn ich <?php echo ('1' && new Exception); ?> ausführen möchte. Scheiß Interpreter, dass er mich das nicht machen lässt. Ist aber eben Käse. ;)
 

SP4C3

Neu angemeldet

Registriert
27 Aug. 2013
Beiträge
54
Ja, der Fall, indem ich nach dem ?> ein Leerzeichen ausgeben möchte.
Warum ich das möchte ist völlig irrelevant.
 

LemonDrops

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
543
Bei einem definierten Verhalten, muss der Interpreter nicht raten..

Doch, da Encoding schwer ist. Der Interpreter muss also Raten ob alle Zeichen nach dem "?>" als leer Wahrgenommen werden. Wenn dann irgendein komisches Zeichen im Quellcode ist, dass man nicht unbedingt angezeigt wird, wie soll sich der Interpreter verhalten?

Ein ähnliches Problem hatte ich erst letztens, allerdings in Java Script. Eine Library ist im Frontend mit einem Fehler abgebrochen, weil in einem UTF-8 Text ein unbekanntes Zeichen (oder Fehler) war. Wir haben es nicht gefunden und mussten den Text in ein anderes Format (in dem das Zeichen wohl nicht vorhanden war) und dann wieder zurück zu UTF-8 kodieren.

Der einzige Weg ein Verhalten zu haben, dass immer gleich ist, ist alles nach dem "?>" auszugeben, anstatt den Interpreter über den Sinn und Unsinn von Zeichen urteilen zu lassen.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Ja, der Fall, indem ich nach dem ?> ein Leerzeichen ausgeben möchte.
Warum ich das möchte ist völlig irrelevant.
Okay, dann erkläre mir bitte, wie ich es in Java hinbekomme außerhalb einer Klassendefinition (aber im entsprechenden Dokument) eine Methode zu definieren.
Wieso ich das vollkommen irrsinnigerweise machen sollte, spielt natürlich keine Rolle, aber es muss ja wohl möglich sein:

[src=java]class MeineTolleKlasse {
void tolleMethode() {
//
}
}

int tolleFreieMethode {
// ohne Begründung, warum man das tun sollen wollte
// muss es ja wohl möglich sein
// an dieser Stelle eine Methode zu definieren, oder?
// Argumentation = 0
// Bullshit = 1
}[/src]

Im Übrigen heißt Leerzeichen nach ?> entfernen nicht, dass es gänzlich unmöglich wäre ein Leerzeichen dahinter zu erzwingen.
Entweder mittels expliziter Ausgabe innerhalb von PHP:
[src=php]<?php echo ' '; ?>[/src]
oder mittels erzwungenem Leerzeichen auf HTML-Ebene:
[src=html5]<?php /* dein code */ ?> [/src]

@LemonDrops: Es soll schwer sein sich das erste Zeichen nach ?> anzuschauen?
Es gibt nur eine begrenzte Menge an Steuerzeichen, die Leerzeichen/Zeilenumbruch etc entsprechen. Ist das erste Zeichen danach nicht in dieser Liste, so brauchst du es nicht zu entfernen.

Mit verbuggter Zeichenkodierung brauchst du nicht zu argumentieren, gewöhnlich wird die Zeichenkodierung im Dokument und gegenüber dem Interpreter (Zeichenkodierung Apache, PHP, MySQL und im Dokument) angegeben. Du kannst also sehr wohl auch so Webapplikationen erstellen, dass sie die korrekte Zeichenkodierung verwenden, ohne zu wissen, welche Zeichenkodierung vom interpretierenden System standardmäßig verwendet wird, indem du nämlich explizit eine bestimmte Kodierung über alle Ebenen "erzwingst".
 

LemonDrops

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
543
Ob das technisch alles so einfach ist werden wir nicht klären können, nehmen wir mal an man könnte Problemlos alle Situationen abdecken, ohne Sicherheitsprobleme usw.

Es gibt es noch weitere wichtige Frage, wenn man deine Lösung in Betracht zieht:

Warum soll sich PHP standardmäßig so verhalten, wie es in der Regel nicht erwünscht ist? (Normalerweise will man dass das Dokument so schnell wie möglich raus gehen.)
Viel wichtiger ist, warum sollte man eine einfache, funktionierende Lösung ersetzen?
 

SP4C3

Neu angemeldet

Registriert
27 Aug. 2013
Beiträge
54
Okay, dann erkläre mir bitte, wie ich es in Java hinbekomme außerhalb einer Klassendefinition (aber im entsprechenden Dokument) eine Methode zu definieren.
Wieso ich das vollkommen irrsinnigerweise machen sollte, spielt natürlich keine Rolle, aber es muss ja wohl möglich sein:
Du willst also ein grundlegendes Sprachkonzept ändern?

Im Übrigen heißt Leerzeichen nach ?> entfernen nicht, dass es gänzlich unmöglich wäre ein Leerzeichen dahinter zu erzwingen.
Entweder mittels expliziter Ausgabe innerhalb von PHP:
[src=php]<?php echo ' '; ?>[/src]
oder mittels erzwungenem Leerzeichen auf HTML-Ebene:
[src=html5]<?php /* dein code */ ?> [/src]
Was ist mit
Code:
<p><?php echo $tolleVariable; ?> blabla</p>
Hier das Leerzeichen zu entfernen wäre unintuitiv.

Gleichzeitig würde das entfernen von folgenden Leerzeichen, den Behandlungsraum des Interpreters aufwendig erweitern.
So ist klar, der Interpreter arbeitet zwischen <?php und ?> und nicht außerhalb.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.750
Ort
in der Zukunft
Mensch leute - das schöne an php ist doch das sie nicht so strickt wie z.B. java ist - und man seinen Programmierstiel an die Gegebenheiten gut anpassen kann.
Man kann wenn nötig sehr strickt und stark objektorientiert schreiben - jedoch auch mal nur 3 Zeilen "hinrotzen" die dann einen kurzfristigen Dienst tun.

Ich finde das als einen großen Vorteil - und daher kein Grund darüber zu disskutieren was richtig oder besser ist. Beides ist richtig und an der passenden Stelle eingesetzt auch die richtige Wahl.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
Was ist mit
Code:
<p><?php echo $tolleVariable; ?> blabla</p>
Hier das Leerzeichen zu entfernen wäre unintuitiv.
Das zeugt aber auch schon von einem sehr sauberen Programmierstil!

Zumal für den Fall klar ist, dass du " blabla" nicht entfernen wirst. Leerzeichen entfernen wäre ja nur dann sinnvoll, wenn dahinter nichts mehr kommt. Denn selbst wenn ich hier das Leerzeichen entferne, habe ich eine Ausgabe erzeugt und kann den Header nicht mehr weiter modifizieren:

preheader.php
[src=php]<?php
$setze = "hier";
$ganz = "setze ich";
$viel = "viele";
$config = "variablen";
?> hier lohnt sich das Entfernen des Leerzeichens nicht[/src]

page.php
[src=php]<?php
include('preheader.php'); // fail!
header('Location: http://google.de');
?>[/src]

Es ist natürlich nur interessant Leerzeichen zu entfernen, wenn dahinter im Dokument sonst kein Inhalt mehr erfolgt, etwa:
preheader.php
[src=php]<?php
$setze = "hier";
$ganz = "setze ich";
$viel = "viele";
$config = "variablen";
?> [/src]
(Man beachte, hinter dem ?> befindet sich ein Leerzeichen!)

page.php
[src=php]<?php
include('preheader.php'); // wenn das Leerzeichen entfernt wird, habe ich gewonnen || der Interpreter braucht sich erst an dieser Stelle darum zu kümmern!
header('Location: http://google.de');
?>[/src]


Für den Fall, dass du soetwas programmieren möchtest:
seltsamer.php
[src=php]<?php
echo 'Hallo';
?> [/src]
(Leerzeichen hinter dem ?>)

programmierstil.php
[src=php]<?php include('seltsamer.php'); ?>Welt<?php
echo ', wie geht es dir?';
?>[/src]

würde ich dich ohnehin fragen, ob du mich verarschen willst oder ob du tatsächlich so dämlich bist. ;)
Das macht man einfach nicht..



Gleichzeitig würde das entfernen von folgenden Leerzeichen, den Behandlungsraum des Interpreters aufwendig erweitern.
So ist klar, der Interpreter arbeitet zwischen <?php und ?> und nicht außerhalb.

[src=php]<?php
if($random){
?>
<html>
<head>
</head>
<body>
</body>
</html>
<?php
}else{
<html>
<head>
</head>
<body>
</body>
</html>
}
?>[/src]

Ist jetzt das HTML im PHP eingebettet oder umgekehrt?



Du willst also ein grundlegendes Sprachkonzept ändern?
Ist doch vollkommen egal, ob ich das möchte und ob das sinnvoll ist, weil es ja theoretisch sein könnte, dass man das tun möchte.
Das war deine Argumentation, bzw keine Argumentation, ich wollte dir damit nur vor Augen führen, wie du gerade argumentiert hast.
 
Oben