Seite 1 von 1

str_replace - Bin ich doof oder doch nicht?

Verfasst: 30.08.2008, 02:30
von Synonym
Mal eine Frage an euch, denn ich laufe sonst wohl wirklich Amok, schmeiße mich aus dem Fenster oder mache sonstwas. Suche hier bei mir im System, bei PHP und Google hin und her ändere alles was nur geht, lass Debug-Ausgaben lauben und dennoch, bringt alles nichts..

Habe ein Script mit dem Teil:

Code: Alles auswählen

$aktivierungscode = zufallsstring(10);
	// $aktivierungscode = 58-Zccwvd2CfC;
	
	echo $aktivierungscode.'<br />';
	$mail_tpl = str_replace&#40;"&#123;&#123;bestaetigungslink&#125;&#125;", 'http&#58;//domain/aktivierung.php?code='.$aktivierungscode, $mail_tpl&#41;;
	$mail_tpl = str_replace&#40;"&#123;&#123;benutzer_name&#125;&#125;", $benutzer_name, $mail_tpl&#41;;
	$mail_tpl = str_replace&#40;"&#123;&#123;benutzer_kennwort&#125;&#125;", $benutzer_kennwort, $mail_tpl&#41;;
	$mail_tpl .= $aktivierungscode;
	
	echo $mail_tpl;
Also ein simpler Code bei dem es nichts gibt was kompliziert wäre, doch, der "$aktivierungscode" ist z.B. "58-Zccwvd2CfC", wird auch im ersten echo richtig angezeigt.

Nach der Ausgabe der $mail_tpl steht dann da aber "X-Zccwvd2CfC" und das zur Sicherheit eingebaute "$mail_tpl .= $aktivierungscode;" bringt wieder den richtigen Code "58-Zccwvd2CfC".

Das war nur ein Auszug, es werden noch 20 andere Werte ersetzt und alle stimmen, nur nicht der "$aktivierungscode".

Weiß einer von euch warum oder was das sein kann? Ich reiße mir gleich die Haare aus oder renne im Dreieck. Vier Tage für eine simple Standardfunktion und immer das gleiche Problem..... !??!

Danke euch schon mal.

Gruß, Ingo

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 30.08.2008, 03:47
von nerd
kannst du eventuell mal $mail_tpl posten? bei solchen propblemen isoliere ich den problematischen code immer erstmal in eine test.php um sicherzugehen das das problem nicht von woanders kommt.
eventuell mal die reihenfolge der verschiedenen replaces aendern, gerade bei laengern strings wirds manchmal unuebersichtlich und es wird auch noch an anderen stellen was ersetzt wenn man nicht genau hinguckt (58->X?).

Verfasst: 30.08.2008, 09:03
von Southmedia
Also dein Problem ist, dass zwischendurch der Wert von $aktivierungscode verändert wird? Ist aus diesem Codesnippet nicht ersichtlich.

Ich würde Zeile für Zeile durchgehen, ein echo ... hinten dran und dann direkt exit;, dann kannst du schön nachvollziehen was wo wie und warum schief geht.

Verfasst:
von

Re: str_replace - Bin ich doof oder doch nicht?

Verfasst: 30.08.2008, 10:38
von Mork vom Ork
Synonym hat geschrieben:

Code: Alles auswählen

$mail_tpl = str_replace&#40;"&#123;&#123;bestaetigungslink&#125;&#125;", 'http&#58;//domain/aktivierung.php?code='.$aktivierungscode, $mail_tpl&#41;; 
Nach der Ausgabe der $mail_tpl steht dann da aber "X-Zccwvd2CfC" und das zur Sicherheit eingebaute "$mail_tpl .= $aktivierungscode;" bringt wieder den richtigen Code "58-Zccwvd2CfC".
58 ist der hexadezimale Wert für 88, und das 88. Zeichen in der ASCII-Tabelle ist … tusch … das große X.

Und wieso steht da nun ein X? Das ganze Mailsystem stammt aus dem Computer-Mittelalter, arbeitet textbasiert und dies Anno Dazumal auch noch mit nur 7-bittigen Bytes. Um 8-bittige Daten unfallfrei per Mail zu verschieben, werden sie kodiert. Für Text gibt es dazu eine spezielle Methode namens quoted-printable, dabei können Bytes als Gleichheitszeichen gefolgt von einer zweistelligen Hexzahl maskiert werden.
Schauen wir mal in den Quelltext (!) deiner Mail, sehen wir folgendes: „aktivierung.php?code=58-Zccwvd2CfC“. Man beachte das =58 in der Mitte.
Wo immer du dir also die Mail anschaust, das Programm erwartet, dass der Text quoted-printable-kodiert ist und macht genau das, was es in dem Falle soll: Es ersetzt =58 durch das Zeichen mit der hexadezimalen Nummer 58, ein X.

Was lernen wir daraus? Niemals auf eine verarbeitete Ausgabe verlassen, immer in den Quellcode schauen. Dort hättest du mit Sicherheit den gewünschten Text gesehen und daraufhin, völlig richtig, ein Darstellungsproblem vermutet.

Wie sich dein Problem nun lösen lässt, hängt vom Umfeld ab. Bei E-Mails solltest du dich ein wenig mit MIME befassen und dafür Sorge tragen, dass der Kopf der Mail folgende Zeilen aufweist:

MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Content-Type kann natürlich genauso gut text/html sein, das musst du wissen, welches Format du nimmst. Achte aber so oder so darauf, dass du den richtigen Zeichensatz angibst. Falls du den PHP-Code und/oder die E-Mail-Texte unter Windows schreibst und keine HTML-Masken benutzt, muss dort unbedingt windows-1252 stehen, nicht iso-8859-1.

Behoben wird dein Problem durch die Angabe in der Zeile Content-Transfer-Encoding. Schreibst du dort quoted-printable rein, hast es wieder.

Verfasst: 30.08.2008, 10:54
von Southmedia
Respekt...

Verfasst: 30.08.2008, 11:42
von seo-link
Ja .. nicht schlecht Mork vom Ork :oops:

Verfasst: 30.08.2008, 15:36
von Synonym
@Mork vom Ork
Also genau das ist es. Auf die Idee wegen so einem kleinen String in den Quelltext zu sehen bin ich gar nicht gekommen, zumal es schon überall seit Jahren funktioniert. Aber da habe ich auch keine so kleinen Zahlen wie "58". Und ich dachte schon ich werde wahnsinnig damit.

Danke euch!

Verfasst: 30.08.2008, 18:04
von kammerjaeger
...schön dass es manchmal noch wem gelingt, SEOs ins Staunen zu versetzen!!!

nochmal Respekt :oops: