Auge: Swift-5.0.3 Sonderzeichen in Mail Adresse

Beitrag lesen

Hallo

Julius hat ja schon die Doku dieser Funktion verlinkt, dennoch möchte ich etwas hinterherschieben.

 echo '<pre>' . print_r($puny_email, true) . '</pre>'; // Testausgabe

Was bedeutet das "true"?

Das true sorgt dafür, dass die Funktion nicht sofort eine Ausgabe erzeugt. In genau dem obigen Beispiel erfolgt die Ausgabe direkt im Anschluss der Ausführung von print_r. Die Ausgabe von print_r wird unmittelbar in die Zeichenkette eingefügt und diese mit echo ausgegeben. Ohne true für print_r bräuchte man nicht einmal echo, da print dann die (dann nackte) Ausgabe instantan sebst erzeugt.

Ich schreibe die Ausgaben von Skripten aber gerne in Variablen, die ich erst später gesammelt ausgebe. Da print_r ohne die explizite Angabe des zweiten Parameters mit true die Ausgabe, wie eben angemerkt, sofort erzeugt, würde mir das um die Ohren fliegen.

$temperatur = getTemerature();
$zwischenergebnisT = print_r($temperatur); // <==
$datum = strftime("%d.%m.%Y");
$uhrzeit = strftime("%H:%M");

Mit dem obigen Code, dessen Variablen in ein HTML-Template wie dieses:

<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="utf-8">
  <title>Konstruktion eines Zifferfonts</title>
 </head>
 <body>
  <header>
   <h1>Konstruktion eines Zifferfonts</h1>
  </header>
  <main>
   <section>
    <h2>Ein- und Ausgabe</h2>
    <dl>
     <dt>Temperatur (Testausgabe)</dt>
     <dd><?php echo htmlspecialchars($zwischenergebnisT); ?></dd>
     <dt>Temperatur</dt>
     <dd><?php echo htmlspecialchars($temperatur); ?></dd>
     <dt>Datum</dt>
     <dd><?php echo htmlspecialchars($datum); ?></dd>
     <dt>Uhrzeit</dt>
     <dd><?php echo htmlspecialchars($uhrzeit); ?></dd>
    </dl>
   </section>
  </main>
 </body>
</html>

… eingefügt werden, würde die Ausgabe von print_r im HTML-Quelltext vor dem ersten HTML-Element stehen, da die Ausgabe sofort erfolgt. Der Wert der Variable $zwischenergebnisT lautete true für die erfolgreiche Ausführung der Funktion, was zu einer Ausgabe von 1 als Entsprechung von true per echo $zwischenergebnisT; führen würde.

Dieser Code:

$temperatur = getTemerature();
$zwischenergebnisT = print_r($temperatur, true); // <==
$datum = strftime("%d.%m.%Y");
$uhrzeit = strftime("%H:%M");

… speichert die Ausgabe hingegen in der Variable $zwischenergebnisT, die ihren Wert mit echo $zwischenergebnisT; an der gewünschten Stelle im Template hergibt.

Wenn ich nur dieses ausgebe

echo $puny_email;

erhalte ich in meinem Beispiel genau das gleiche. Oder ist dieses nur Zufall?

Ja und nein. In diesem Beispiel ist die Ausgabe, wenn kein Fehler aufgetreten ist, identisch. In beiden Fällen wird ein String, nämlich der mit der Emailadresse, ausgegeben. Wäre $puny_email ein Array, bekämst du mit echo $puny_email; aber nur das Wort „Array“ zu sehen. Mit echo print_r($puny_email, true); werden dir die Elemente des Arrays in der ganzen Schönheit dessen Struktur angezeigt [1].

Manchmal reichen die Infos, die print_r hergibt, nicht. Dann ist var_dump zu bevorzugen. In vielen Fällen reicht die Ausgabe von print_r zur Analyse aber aus.

Tschö, Auge

--
Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
Wolfgang Schneidewind *prust*

  1. Wie im Beispiel #1 auf der von Julius verlinkten Doku-Seite zur Funktion. ↩︎