geshredderten String wieder zusammensetzten

tklustig

Erfahrenes Mitglied
Hallo Leute, durch folgenden Code habe ich einen String geshreddert
PHP:
        $string = str_replace(";", ";\n", $model->mail_antwortadresse);
                $model->mail_antwortadresse = $string;
                $model->save();
Bedauerlicherweise wird der String durch die nicht sichtbaren Leerzeichen erweitert,was beim Wiederauslesen aus der Datenbank zu Problemen führt(ein Versand an jede einzelne Adresse ist nicht mehr möglich). Ich bräuchten Ihn also wieder in seiner Originalversion,die so war:
Code:
kipp.thomas@gmx.net;tklustig.thomas@gmail.com;tklustig@web.de
Wie bekomme ich das am günstigsten hin?
Hier noch der Code,der jetzt nicht mehr funktioniert:
PHP:
 $string2Extract = $model->mail_antwortadresse;
                    $extract_outer = explode("'", $string2Extract);
                    $extract_inner = explode(";", $extract_outer[0]);
                    //verschicke die Mail gemäß an die im Array extract_inner genannten Empfänger
                    //eventuell hilft ein var_dump auf das Array bei der Fehlersuche weiter
                    for ($i = 0; $i < count($extract_inner); $i++) {
                        Yii::$app->mailer->compose()->setFrom($model_eingang->mail_adresse_absender)
                                ->setTo($extract_inner[$i])
                                ->setSubject($model->betreff)
                               ->setTextBody(strip_tags($model->bodytext))
                                ->send();
                    }
 
Zuletzt bearbeitet:
Hallo tklustig

Die einfachste Variante ist einfach ein Trim auf die Adressen zu machen.
Bsp:
PHP:
 $string2Extract = $model->mail_antwortadresse;
                    $extract_outer = explode("'", $string2Extract);
                    $extract_inner = explode(";", $extract_outer[0]);
                    //verschicke die Mail gemäß an die im Array extract_inner genannten Empfänger
                    //eventuell hilft ein var_dump auf das Array bei der Fehlersuche weiter
                    for ($i = 0; $i < count($extract_inner); $i++) {
                        Yii::$app->mailer->compose()->setFrom($model_eingang->mail_adresse_absender)
                                ->setTo(trim($extract_inner[$i]))
                                ->setSubject($model->betreff)
                               ->setTextBody(strip_tags($model->bodytext))
                                ->send();
                    }

Eine andere wäre mittels RegularExpression die Leerzeichen herausfiltern. Was aber in diesen Fall doch etwas wie ein Overkill wäre.

Code ist nicht getestet sollte aber funktionieren.
 
Wieso funktioniert deine Lösung (ich habe es soeben probiert...) ?
Lt. Manuals entfernt trim(); whitespaces (oder andere Zeichen) am Anfang und Ende eines Strings.
Der String wird aber an jedem Semikolon gebrochen. Zur Verdeutlichung:
Code:
$string=kipp.thomas@gmx.net;."\n".tklustig.thomas@gmail.com;."\n".tklustig@web.de
 
Zuletzt bearbeitet:
der String ist aber nicht dein Problem.

Dein Problem war das Leerzeichen nachdem Semikolon, daher hat das Trim den gewünschten Effekt gebracht und dein Skript wieder funktionstüchtig gemacht.


Um dir das zu Visualisieren Probiere mal das Skript aus:
PHP:
 $string2Extract = $model->mail_antwortadresse;
                    $extract_outer = explode("'", $string2Extract);
                    $extract_inner = explode(";", $extract_outer[0]);
                    //verschicke die Mail gemäß an die im Array extract_inner genannten Empfänger
                    //eventuell hilft ein var_dump auf das Array bei der Fehlersuche weiter
                    for ($i = 0; $i < count($extract_inner); $i++) {
                              printf("%s", str_replace("\n", "LEERZEICHEN", trim($extract_inner[$i]);
                              printf("%s", str_replace("\n", "LEERZEICHEN", trim($extract_inner[$i]));
                    }

Ich hoffe ich habe jetzt kein Denkfehler. :)
 
Zurück