Hello,
Mit einer Einstellung in der php.ini oder in der Konfiguration des Hosts oder Virtual Hosts oder
in einer ".htaccess"-Datei kann man das Verhalten beieinflussen.
»»
http://de.php.net/manual/de/function.get-magic-quotes-gpc.php
und
http://de.php.net/manual/de/ref.info.php#ini.magic-quotes-gpcund wie genau?
php_flag magic_quotes_gpc off ## Du willst sie doch weg haben
Ersatzweise
php_value magig_quotes_gpc 0 ## Du willst sie doch weg haben
manche Derivate verstehen das nicht anders.
Sie würden dann das "off" oder "on" als Konstante suchen
das mit den Konstanten funktioinert aber nur innerhalb der php.ini
Wichtig ist, dass der Apache Dir nicht mit einem 500er Fehler auf die Finger haut, wenn Du das einsetzt.
eingabe: echo "Der Teilnehmer heißt ", $teilnehmer, ' und ist ein Clon von ', $teilnehmer, 1 , '<br>';
ausgabe: Der Teilnehmer heißt Shadow und ist ein Clon von Shadow1<br />ok, das habe ich erwartet
Das ist auch "safe". Kann man sich also darauf verlassen, dass es funktioniert
Anreihung von Attributen mit Komma
eingabe: echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer , '<br>';
ausgabe: Der Teilnehmer heißt Shadow und ist ein Clon von Shadow<br />das auch
Das ist auch "safe". Anreihung von Strings mit Punkt verbunden zu einem String.
Da müsste links auch nicht "echo" stehen, sondern könnte stehen
$ausgabe = ....
Und dann später würde man mit $ausgabe erst machen, was einem einfällt.
eingabe: echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer . 1 .'<br>' ;
ausgabe: Der Teilnehmer heißt Shadow und ist ein Clon von Shadow1<br />
<br />das hätt ich nicht gedacht, liegt das daran das das alles ein string ist (verknüpfung)?
Das liegt daran, dass PHP nicht konsequent ist. Die 1 wird hier fälschlicherweise als Konstantenbezeichner angesehen, aber als Konstante nicht gefunden. Daher macht PHP den zweiten inkonsequenten Schritt; es vermutet jetzt, dass die 1 dann doch wohl ein String sein sollte und hängt ihn an den vorhandnen an. Das ist dann die "Typumwandlung durch die Hintertür"
Klarer wird das, wenn man stattdessen ein Literal nimmt
eingabe: echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer . Sieben .'<br>' ;
Danne steht da auch hinterher
Der Teilnehmer heißt Shadow und ist ein Clon von ShadowSieben<br> ;
Wenn an aber jetzt vor dieser Zeile irgendwo schreibt
define('Sieben',' Eins ');
dann steht da hinterher
Der Teilnehmer heißt Shadow und ist ein Clon von Shadow Eins <br> ;
Probier es einfach ochmal aus
<?php ### konstanten.php ###
$teilnehmer = 'Schalk';
echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer . Sieben .'<br>' ;
define('Sieben',' Eins ');
echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer . Sieben .'<br>' ;
?>
echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer . 1+1 .'<br>' ;
echo "Der Teilnehmer heißt " . $teilnehmer . ' und ist ein Clon von ' . $teilnehmer . 1+1;warum aber 2x nur eine 1 und sonst nichts angezeigt wird geht über meinen horizont.
da kommen sowohl PHP mit dem Quellcode als auch der Browser mit der Ausgabe durcheinander
Sowas muss man also durch sauberers Arbeiten AUF JEDEN FALL VERHINDERN
was ich nicht verstehe: echo knalt also ungeparst dem browser die daten vorn latz (der ja mit php nichts anzufangen weiß), ok, aber warum wird dann der ihnhalt der variable ausgegeben??
Das geschieht immer dann, wenn man die Variablen entweder direkt an Echo übergibt, in einem String sammelt (mit Punkt) oder aber die äußerste Umklammerung des Stings die doppelten Häkchen sind
Es fehlen uns jetzt noch die Steuerzeichen
Scheu einfach mal unter http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.double, welche es gibt.
Gib einfach mal ein paar Strings aus, die diese Zeichenfolgen enthalten, wahlweise mit einfachen oder doppelten Häkchen.
Um was sehen zu können, weider das berühmte <pre> Element benutzen
<?php ### steuerzeichen.php ###
echo "<pre>\n";
echo "Dies ist ein\nTest für einen Umbruch\n";
echo "Dies\tist\tein\tTest\tfür\nTabulartoren\n";
echo 'Dies ist ein\nTest für einen Umbruch\n';
echo 'Dies\tist\tein\tTest\tfür\tTabulartoren\n';
echo "</pre>\n";
?>
Es fehlen uns nun nur noch die "Maskierungen", dann sind wir durch mit dem zweiten Block.
Was ist, wenn man ausgeben will
Der Inhalt der Variable $wetter ist "Regen"
dann kann man das so formulieren:
<?php ### maskierung ###
$wetter = 'Regen';
echo "<p>Der Inhalt der Varoable $wetter ist "$wetter"</p>\n";
?>
$wetter würde inndoppelten Häkchen normalerweise ersetzt deich seinen Inhalt
Durch den Backslash vor dem Dollarzeichen wird dieses aber von einem Zeichen mit reservierter Bedeutung (hier kommt ein Bezeichner) wieder zu einen normalen Zeichen degradiert.
Das gleiche ist mit dem Doppelhäkchen mit vorangehendem Backslash.
Das verliert duech diese "Maskierung" auch seine Sonderbedeutung und wird ausgegeben.
Der Backslash selber wird mit sich selber maskiert.
Wenn man nun also Echo "Dieser Umbruch \n geht verloren";
schreibt, wird er Backslash, der das n zum Sinderzeichen erheben sollte "entschärft" und das n sit wieder ein normales Zeichen.
So weit so gut.
Wenn Du noch Lust hast, können wir noch "Fehlermeldungen AN" angehen, dann reicht es für heute...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
