Linuchs: Mail Empfänger / Betreff maskieren

Hallo,

ich habe viele Adressen mit Gänsefüßen, z.B. Shanty-Chor "Die Landratten"

In meiner Liste bekomme ich die Mail-Adresse in dieser Form:
"Shanty-Chor "Die Landratten"" <mail@example.com>

Die Anzeige der versendeten Mails enzhält dann nur Shanty-Chor. Das reicht nicht.

Wie werden diese Zeichen bei einer Mail maskiert?

Gruß, Linuchs

  1. Moin!

    In meiner Liste bekomme ich die Mail-Adresse in dieser Form:
    "Shanty-Chor "Die Landratten"" <mail@example.com>

    Wie werden diese Zeichen bei einer Mail maskiert?

    Bei mir geht:

    $to='"Shanty-Chor \"Die Landratten\"" <mail@example.com>';
    

    Jörg Reinholz

    1. Hallo Jörg,

      Bei mir geht:

      $to='"Shanty-Chor \"Die Landratten\"" <mail@example.com>';
      

      Mal schau'n. Also muss ich erstmal die Mail-Adresse vor der HTML-Wandlung "retten", mailcodieren und danach für die HTML-Liste HTMLcodieren:

          $firma1_mailcode = addslashes( $row['mail'] );
          $firma1_mailcode = htmlspecialchars( $firma1_mailcode );
          foreach ( $row as $key => $val ) $row[$key] = quote2html( $val );
      

      Ja, für den Spezialfall " geht das zufällig. Da die Eingaben aber von Usern kommen, muss ich auf alles gefasst sein, z.B. kommt so etwas aus der Datenbank:

      Frankfurter „Shanty”'"Kalle"
      

      Das setze ich ein als Wert firma1_mailcode

      <a href='mailto:"[firma1_mailcode] VIP=[adr_id]" &lt;[email]&gt;'>
      

      Im HTML Quellcde sieht's dann so aus:

      <a href='mailto:"Karl-Heinz Osmer „Shanty”\'\&quot;Kalle\&quot; VIP=75" &lt;osmer.kh@osmer.de&gt;'>
      

      HTML ignoriert aber die Maskierung ' und bricht die Ausgabe ab.

      Also die eigentlich für Datenbanken gedachten Slashes sollen beim Mailprogramm wirken, müssen aber per HTML übermittelt werden.

      Irgendwie blicke ich nicht durch.

      Linuchs

      1. habe das jetzt provisorisch so gelöst:

            $firma1_mailcode = str_replace( "'", "-", $row['firma1'] );
            $firma1_mailcode = addslashes( $firma1_mailcode );    // aus "  mach \"
        

        Das Hochkomma wie etwa bei O'Melly wird ein -

      2. Moin,

        Also muss ich erstmal die Mail-Adresse vor der HTML-Wandlung "retten", mailcodieren und danach für die HTML-Liste HTMLcodieren:

            $firma1_mailcode = addslashes( $row['mail'] );
            $firma1_mailcode = htmlspecialchars( $firma1_mailcode );
            foreach ( $row as $key => $val ) $row[$key] = quote2html( $val );
        

        Was hast du denn genau vor, also wo werden diese Mailadressen eingesetzt? Wenn es um den Kontextwechsel hin zum den Kopfzeilen einer Mail gibt, dann steht alles Relevante in RFC 5322.

        Viele Grüße Robert

      3. Moin!

        Irgendwie blicke ich nicht durch.

        Das ist doch einfach. Du musst Dich nur dumm stellen und stur "von innen nach außen" denken

        • Ersetzen aller " durch \\" im Name. Grund? Nächster Schritt:
        • Einschließen des Namens in ". Grund? Nächster Schritt:
        • Link wird im html nochmals in " eingeschlossen. Dann verwende auch htmlentities($to, ENT_COMPAT) um die " in &quot; umzuwandeln.
        <?php
        $name = 'Shanty-Chor "Die Landratten"';
        $mail = 'foo@example.com';
        $to = '"' . str_replace('"', '\"', $name) . '" <' . $mail . '>';
        $link = '<a href="mailto:' . htmlspecialchars($to) . '">' . htmlentities($name). '</a>';
        echo $link, "<br>\n";
        
        $name = "anges d'amour";
        $mail = 'bar@example.com';
        $to = '"' . str_replace('"', '\"', $name) . '" <' . $mail . '>';
        $link = '<a href="mailto:' . htmlentities($to, ENT_COMPAT) . '">' . htmlentities($name). '</a>';
        echo $link, "<br>";
        

        Ergebnis:

        <a href="mailto:&quot;Shanty-Chor \&quot;Die Landratten\&quot;&quot; &lt;foo@example.com&gt;">Shanty-Chor &quot;Die Landratten&quot;</a><br>
        <a href="mailto:&quot;anges d'amour&quot; &lt;bar@example.com&gt;">anges d'amour</a><br>
        

        Mehr ist nicht zu tun.

        Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset). Sonst geht's beim Umläuten daneben.

        Jörg Reinholz

        1. @@Jörg Reinholz

          Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset).

          Es kann Gründe geben, genau das nicht zu tun.

          Sonst geht's beim Umläuten daneben.

          Nein. Wenn die Angabe der Zeichencodierung in der Ressource erfolgt (BOM oder meta-Angabe[1]), dann geht beim Umläuten auch nichts daneben.

          LLAP 🖖

          --
          „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
          „Hat auf dem Forum herumgelungert …“
          (Wachen in Asterix 36: Der Papyrus des Cäsar)

          1. nachträglich geändert, denn „Pragma-Direktive“ bezeichnet nur die meta-Angaben mit http-equiv/content und umfasst nicht meta-Angaben mit charset ↩︎

          1. Moin!

            @@Jörg Reinholz

            Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset).

            Es kann Gründe geben, genau das nicht zu tun.

            Ich übersetze den Leitsatz des Sachbearbeiters "Use character encoding declarations in HTTP headers if it makes sense, and if you are able, for any type of content, but in conjunction with an in-document declaration." durchaus von dem abweichend, was ich aus deinen Worten lese...

            Jörg Reinholz

            1. @@Jörg Reinholz

              Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset).

              Es kann Gründe geben, genau das nicht zu tun.

              Ich übersetze den Leitsatz des Sachbearbeiters "Use character encoding declarations in HTTP headers if it makes sense, and if you are able, for any type of content, but in conjunction with an in-document declaration." durchaus von dem abweichend, was ich aus deinen Worten lese...

              ?? Meinst du meine Übersetzung? „Verwenden Sie Angaben zur Zeichencodierung in HTTP-Headern für alle Inhaltstypen, für die das sinnvoll ist und für die Sie dazu in der Lage sind, aber in Verbindung mit einer Angabe im Dokument.“

              Gründe gegen die Angabe im HTTP-Header sind etwas weiter unten genannt, wobei für mich Altlasten der Hauptgrund wären.

              LLAP 🖖

              --
              „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
              „Hat auf dem Forum herumgelungert …“
              (Wachen in Asterix 36: Der Papyrus des Cäsar)
              1. Moin!

                Gründe gegen die Angabe im HTTP-Header sind etwas weiter unten genannt, wobei für mich Altlasten der Hauptgrund wären.

                Naja. Wenn ich mir die "Gründe" ansehe, dann treffen die für mich eher nicht zu.

                • It may be difficult for content authors to change the encoding information for static files on the server (Es kann schwierig sein die Dokument-Kodierung für statische Dateien zu ändern.)

                Damit dürfte ich eher geringe Probleme haben.

                • Server settings may get out of synchronization with the document for one reason or another

                Dto.

                • There are potential problems for both static and dynamic documents if they are not read from a server; for example, if they are saved to a location such as a CD or hard disk.

                Nun ja. Kein Grund keine ordentlichen Header zu senden. Wenn ich z.B. Java-Skript mit Umlauten habe (und sei es in Kommentaren!) dann sind http-header wohl der einzige Weg die Kodierung zu übermitteln. Hinzu kommt: Wenn ich etwas mache, was auf CD's oder anderen Medien gespeichert werden soll, dann weiß ich das vorher.

                Altlasten

                /var/www/alt >  find  -name "*.html" -exec recode iso8859-15..utf-8 {} \;;
                

                Jörg Reinholz

                1. @@Jörg Reinholz

                  Naja. Wenn ich mir die "Gründe" ansehe, dann treffen die für mich eher nicht zu.

                  Auf mich eher auch nicht.

                  Der Artikel sagt ja auch nicht, dass man den Server keinesfalls die Codierung angeben lassen sollte – im Gegenteil.

                  Altlasten

                  /var/www/alt >  find  -name "*.html" -exec recode iso8859-15..utf-8 {} \;;
                  

                  Das wäre auch eine Möglichkeit – für manche.

                  Andere wollen/können die Codierung von Altlasten möglicherweise nicht ändern. Und für genau die ist keine serverseitige Angabe der Codierung die Option, alt neben neu zu haben.

                  LLAP 🖖

                  --
                  „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
                  „Hat auf dem Forum herumgelungert …“
                  (Wachen in Asterix 36: Der Papyrus des Cäsar)