jarod: mysteriöses Auftauchen von "!", Leerzeichen und Zeilenumbruch

Hallo alle zusammen.

Ich bin am Verzweifeln.
Ich möchte aus einer DB eine Liste von Daten herausholen, diese dann in eine Tabelle schreiben und versenden.

Das Auslesen und das Versenden funktioniert ohne Probleme.

Jedoch schleichen sich in den HTML-Code, der erzeugt wird, Zeichen ein, die da nicht hingehören.

Hier ein Beispiel:

  
<TR>  
<TD CLASS="tbbody" ALIGN="left">Modem</TD>  
<TD CLASS="tbbody" ALIGN="left">Siem</TD>  
<TD CLASS="tbbody" ALIGN="left">UL+ STU2 plug-in (2 wirepairs, w/o G.703 Interface) </TD>  
<TD CLASS="tbbody" ALIGN="left">1</TD>  
<TD CLASS="tbbody" ALIGN="left">1</TD>  
<TD CLASS="tbbody" ALIGN="left">0</TD>  
<TD CLASS="tbbody" ALIGN="left!  
 ">1</TD>  
</TR>  
<TR>  
<TD CLASS="tbbody" ALIGN="left">Modem</TD>  
<TD CLASS="tbbody" ALIGN="left">Siem</TD>  
<TD CLASS="tbbody" ALIGN="left">UL+ X.21Interface Module </TD>  
<TD CLASS="tbbody" ALIGN="left">2</TD>  
<TD CLASS="tbbody" ALIGN="left">3</TD>  
<TD CLASS="tbbody" ALIGN="left">0</TD>  
<TD CLASS="tbbody" ALIGN="left">1</TD>  
</TR>  

Die Tabelle wird über eine Schleife erzeugt, daher schließe ich einen Fehler bei den Tags oder so aus, da es in der 2. Tabellen-Zeile fehlerfrei ist. In der ersten aber ! " steht. Den "CR LF" kann man ja auch erkennen.

Hat da jemand eine Idee, wo ich noch ansetzen kann?

Ich weiss nicht mehr weiter! :-(

Gruß

Jarod

  1. Der Fehler liegt mit Sicherheit in dem Code, der die Tabelle erzeugt. Ohne diesen Code können wir Dir nicht weiterhelfen.

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Der Fehler liegt mit Sicherheit in dem Code, der die Tabelle erzeugt. Ohne diesen Code können wir Dir nicht weiterhelfen.

      Gruß, LX

      Also wenn ich mir den Inhalt der Variablen via var_dump() anzeigen lasse, dann sind sie komplett fehlerfrei. Keine komischen Zeichen oder Zeilenümbrüche.

      Daher schließe ich die Schleifen jetzt mal aus. Es werden 2 Variablen mit HTML-Code gefüllt ($output und $output_1).
      Dies wird jeweils in eine eigene Mail gepackt und verschickt:

        
      @mail($address,"Lagerstatus ".date("d.m.Y")." - Artikel nicht ausreichend auf Lager",$output, $GLOBALS['mail_header_html']);  
        
      @mail($address,"Lagerstatus ".date("d.m.Y")." - Artikel nicht auf Lager",$output_1, $GLOBALS['mail_header_html']);  
      
      

      mail_header_html enthält folgendes:

        
      $GLOBALS['mail_header_html'] = "MIME-Version: 1.0" . "\r\n" .  
          "Content-type: text/html; charset=utf-8" . "\r\n" .  
          "From: noreply@TM-VIRT1.intern.xyz.de" . "\r\n" .  
          "Reply-to: noreply@TM-VIRT1.intern.xyz.de" . "\r\n" .  
          "X-Mailer: PHP/" . phpversion();  
      
      

      Nur was ich nicht verstehe, der Inhalt von $output und $output_1 wird von identischen Schleifen erzeugt (copy & paste bei schreiben), nur die Variablen sind anders. Eine Mail ist fehlerfrei, die andere nicht. kann es auch mit der Länge der Mail zusammenhängen? Die fehlerhafte ist nämlich länger als die andere(fehlerhafte 11665 Zeichen, fehlerfreie 7611 Zeichen).

      gruß

      jarod

      1. Hallo,

        Der Fehler liegt mit Sicherheit in dem Code, der die Tabelle erzeugt.

        das hätte ich nach deiner Beschreibung auch gesagt. Offensichtlich möchtest du uns diesen Code nicht zeigen, aber ...

        Ohne diesen Code können wir Dir nicht weiterhelfen.

        Stattdessen beteuerst du nur noch einmal:

        Also wenn ich mir den Inhalt der Variablen via var_dump() anzeigen lasse, dann sind sie komplett fehlerfrei. Keine komischen Zeichen oder Zeilenümbrüche.

        Aber irgendwas *muss* ja drin sein, was da nicht hingehört. Zeig doch mal ein Dump von einem Fall, der zu fehlerhaften Zeichen in der Tabelle führt.

        Daher schließe ich die Schleifen jetzt mal aus. Es werden 2 Variablen mit HTML-Code gefüllt ($output und $output_1).

        Ja, gut. Das "WIE" wäre interessant!

        Dies wird jeweils in eine eigene Mail gepackt und verschickt:

        Uninteressant (jedenfalls für den Augenblick). An der Stelle ist das Kind ja wohl schon in den Brunnen gefallen. Es sei denn ...
        Machst du beim Erzeugen des HTML-Codes für die Tabelle(n) ab und zu mal Zeilenumbrüche, z.B. nach den schließenden tr-Tags? Wenn nicht, dann versuch das mal. RFC 2822 schreibt vor, dass einzelne Zeilen einer Mailnachricht nicht länger als 998 Zeichen (mit CR/LF dann 1000 Zeichen) sein dürfen. Durchaus möglich, dass (d)ein MTA an irgendeiner Stelle einen Umbruch einfügt, wo es für den Inhalt nicht gut ist.
        Das würde man dann aber auch im Quellcode der empfangenen Mailnachricht sehen.

        Nur was ich nicht verstehe, der Inhalt von $output und $output_1 wird von identischen Schleifen erzeugt (copy & paste bei schreiben), nur die Variablen sind anders. Eine Mail ist fehlerfrei, die andere nicht. kann es auch mit der Länge der Mail zusammenhängen? Die fehlerhafte ist nämlich länger als die andere(fehlerhafte 11665 Zeichen, fehlerfreie 7611 Zeichen).

        Könnte damit zusammenhängen.

        So long,
         Martin

        --
        Kleine Geschenke erhalten die Freundschaft.
        Große verderben sie aber meist auch nicht.
        1. Hier der Code(habe ihn komplett gepostet, sonst fehlt eventuell etwas elementares):

            
          	if($address != "---" AND $address != "")  
          	{  
          		$output_1  = "<B>Heute ist der ".date("d.m.Y")." </B>";  
          		$output_1 .= "<BR>";  
          		$output_1 .= "<BR>";  
            
          			if(count($NoLagerMail) > 0) {  
          			$output_1 .= "<B>Folgende Artikel sind nicht auf Lager, obwohl sie definiert wurden.</B>";  
          			$output_1 .= "<BR>";  
          			$output_1 .= "<B>Sie sind aber schon gemeldet worden und werden hier nur nochmal erinnert:</B>";  
          			$output_1 .= "<BR>";  
          			$output_1 .= "<BR>";  
          			$output_1 .= "<TABLE CELLPADDING=3 CELLSPACING=0 BORDER=1 CLASS=\"view\">";  
          			$output_1 .= "<TR>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"left\"><b>Kategorie</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>Hersteller</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>Artikel-Bezeichnung</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>lager_min</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>lager_max</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>vorhanden</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>lager_mail</b></TD>";  
          			$output_1 .= "</TR>";  
          					  
          				for($t = 0; $t < count($NoLagerMail); $t++)  
          				{  
          					$output_1 .= "<TR>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['k_Bezeichner']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['h_Bezeichner']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['a_Bezeichner']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['lager_min']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['lager_max']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['vorhanden']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLagerMail[$t]['lager_mail']."</TD>";  
          					$output_1 .= "</TR>";  
          				}  
          			  
          			$output_1 .= "</TABLE>";  
          			}  
            
          		if(count($NoLager) > 0) {  
          	  
          			$output_1 .= "<BR>";  
          			$output_1 .= "<B>Folgende Artikel sind nicht auf Lager, obwohl sie definiert wurden:</B>";  
          			$output_1 .= "<BR>";  
          			$output_1 .= "<BR>";  
          			$output_1 .= "<TABLE CELLPADDING=3 CELLSPACING=0 BORDER=1 CLASS=\"view\">";  
          			$output_1 .= "<TR>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"left\"><b>Kategorie</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>Hersteller</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>Artikel-Bezeichnung</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>lager_min</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>lager_max</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>vorhanden</b></TD>";  
          			$output_1 .= "<TD CLASS=\"tbhead\" ALIGN=\"center\"><b>lager_mail</b></TD>";  
          			$output_1 .= "</TR>";  
          						  
          				for($t = 0; $t < count($NoLager); $t++)  
          				{  
          					$output_1 .= "<TR>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['k_Bezeichner']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['h_Bezeichner']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['a_Bezeichner']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['lager_min']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['lager_max']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['vorhanden']."</TD>";  
          					$output_1 .= "<TD CLASS=\"tbbody\" ALIGN=\"left\">".$NoLager[$t]['lager_mail']."</TD>";  
          					$output_1 .= "</TR>";  
          				}  
          						  
          			$output_1 .= "</TABLE>";  
          			}  
          			var_dump($output_1);	  
          			@mail($address,"Lagerstatus ".date("d.m.Y")." - Artikel nicht auf Lager",$output_1, $GLOBALS['mail_header_html']);  
          			}  
          
          

          Da die Variable $NoLager leer ist, wird nur der obere Teil abgearbeitet.

          Beim schreiben (eher c&p ;-) ) ist mir dann aufgefallen, was du schon erwähnt hast: Nirgends ein \n!!!

          Eingefügt...

          siehe da, es geht.

          Ich danke euch allen recht herzlich für die schnell Hilfe!

          greetz

          Jarod

          1. Hallo,

            Beim schreiben (eher c&p ;-) ) ist mir dann aufgefallen, was du schon erwähnt hast: Nirgends ein \n!!!

            Eingefügt...
            siehe da, es geht.

            danke fürs Feedback - das war nur ein Schuss ins Blaue, weil ich damit vor längerer Zeit auch mal auf die Nase gefallen bin (siehe RFC 2822, Abschnitt 3.5).

            Ciao,
             Martin

            --
            Okay, Alkohol ist keine Antwort.
            Aber manchmal vergisst man beim Trinken wenigstens die Frage.
            1. danke fürs Feedback - das war nur ein Schuss ins Blaue, weil ich damit vor längerer Zeit auch mal auf die Nase gefallen bin

              Ciao,
              Martin

              Das war n guter Schuss ;-)

  2. Mahlzeit jarod,

    Jedoch schleichen sich in den HTML-Code, der erzeugt wird, Zeichen ein, die da nicht hingehören.

    Ich vermute eher, dass diese Zeichen sich nicht von selbst einschleichen, sondern dass Dein PHP-Code diese in irgendeiner Form erzeugt.

    <TD CLASS="tbbody" ALIGN="left!
    ">1</TD>

    [...]

    <TD CLASS="tbbody" ALIGN="left">1</TD>

    Anscheinend herrscht dort in irgendeiner Form ein Unterschied. Schau Dir den relevanten PHP-Code an. Vergleiche Wunsch und Wirklichkeit: protokolliere den Inhalt von Variablen, mache Debug-Ausgaben.

    Hat da jemand eine Idee, wo ich noch ansetzen kann?

    Bei dem Stückchen PHP-Code, dass diese letzte Zelle einer Tabellenzeile erzeugt.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. Hat da jemand eine Idee, wo ich noch ansetzen kann?

    Dort wo Du den Fehler ausgeschlossen hast. Du könntest uns auch den Code (reduziert!) mitteilen der die fehlerhafte Ausgabe erzeugt.

  4. Hi!

    Ich möchte aus einer DB eine Liste von Daten herausholen, diese dann in eine Tabelle schreiben und versenden.

    Definiere "versenden" genauer.

    Jedoch schleichen sich in den HTML-Code, der erzeugt wird, Zeichen ein, die da nicht hingehören.

    Vor dem Versenden (Kontrollausgabe durchgeführt?) oder siehst du sie erst beim Empfänger?

    Lo!

  5. Hi,

    <TD CLASS="tbbody" ALIGN="left!
    ">1</TD>

    
    >   
    > Die Tabelle wird über eine Schleife erzeugt, daher schließe ich einen Fehler bei den Tags oder so aus, da es in der 2. Tabellen-Zeile fehlerfrei ist. In der ersten aber ! " steht. Den "CR LF" kann man ja auch erkennen.  
    >   
    > Hat da jemand eine Idee, wo ich noch ansetzen kann?  
      
    die Internetverwaltung markiert auf diese Weise Datensätze, die potenziell Urheberrechtsverletzungen enthalten. Wenn Du genug davon gesammelt hast, kommst Du entweder 10 Jahre lang in Haft oder wirst 6 Monate bei Microsoft als Programmierer beschäftigt. (Bisher hat noch niemand die zweite Möglichkeit gewählt, vielleicht bist Du ja der erste?)  
      
    
    > Ich weiss nicht mehr weiter! :-(  
      
    Keine Angst, SIE erklären Dir das schon.  
      
    Cheatah  
    
    -- 
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
    X-Will-Answer-Email: No  
    X-Please-Search-Archive-First: Absolutely Yes