Manuel: problem mit ersetzn

hi,
ich möchte aus einer datenbank eine zahl holen, diese dann um eins erhöhen und mit eregi_replace in einen text einbauen. diesen text versende ich dann per mail. wenn ich die zahl $mail_count mit echo ausgebe ist es auch die richtige zahl, wenn ich mir aber die email ansehe, die ich bekommen habe ist die zahl ein kleines quadrat, als ob es diese zahl in der schriftart nicht gibt, das ist aber falsch denn die schrift ist times oder so und da sind 100%ig zahlen enthalten, zumal an anderer stelle auch zahlen sind. woran könnte das liegen?

mfg Manuel

PS: ich weiss, dass das kein deutsch ist. hoffentlich versteht ihr was ich meine.

hier mein code:
if($mail_count == "0") { $mail_count = "1"; } else {
 $sql = mysql_query("SELECT * FROM ".$prefix."_newsletter ORDER BY id DESC LIMIT 0,1");
 $count = mysql_fetch_array($sql);
 $mail_count = $count["id"] + 1; }

$ntitlepre = eregi_replace("\nr\",intval($mail_count),$ntitlepre);

  1. $ntitlepre = eregi_replace("\nr\",intval($mail_count),$ntitlepre);

    wenn ich die zahl $mail_count mit echo ausgebe ist es auch die richtige zahl,

    PHP unterscheidet nicht (oder nur sehr schwach) zwischen Zahlen und Texten. Übergibst Du echo eine Variable, in der eine Zahl steht (ein numerisches Datum), wird diese Zahl in einen Text umgewandelt und dann ausgegeben.

    wenn ich mir aber die email ansehe, die ich bekommen habe ist die zahl ein kleines quadrat, als ob es diese zahl in der schriftart nicht gibt, das ist aber falsch denn die schrift ist times oder so und da sind 100%ig zahlen enthalten,

    Das, was Du in Deinem Zeichensatz als "Zahlen" bezeichnest, sind keine Zahlen, sondern Ziffern, also Schriftzeichen, die einzelne Zahlen darstellen. Da Computer nur Zahlen bzw. Nummern speichern können, aber keine Schriftzeichen, haben alle Schriftzeichen in einem Zeichensatz eine bestimmte Nummer (siehe http://selfhtml.teamone.de/inter/zeichensaetze.htm).

    Warum Du mit echo Deine numerische Variable problemlos ausgeben kannst, habe ich oben erklärt.

    In Deinem eregi_replace() passiert folgendes: Du hast als Ersatz einen Zahlwert angegeben, intval($mail_count). eregi_replace() macht jetzt nichts anderes, als die gefundenen Bytes durch diese Zahl, dieses einzelne Byte zu ersetzen. Wenn $mail_count 123 ist, wird also beispielsweise kein Text "123" (drei Bytes mit den Werten 49, 50, 51) eingesetzt, sondern ein einzelnes Byte mit dem Wert 123.
    Dein Mailprogramm versucht, dieses Byte als Zeichen auszugeben, indem es nach dem Zeichen 123 sucht. Hast Du Pech, ist dort kein Zeichen definiert und es erscheint stattdessen jenes Quadrat. Das kommt bei Dir öfter vor, weil die ersten 31 Zeichen Steuerzeichen sind und keinen grafischen Inhalt haben. Solange $mail_count also kleiner als 32 ist, wirst Du das Quadrat bekommen.
    Probiere mal, $mail_count auf den Wert 65 zu setzen. In der Mail sollte an genau der Stelle ein großes A erscheinen, das Zeichen mit der Nummer 65 (vergleiche mit der oben genannten ASCII-Tabelle in SelfHTML).

    die Lösung Deines Problems: strval() oder settype().

    PS: ich weiss, dass das kein deutsch ist. hoffentlich versteht ihr was ich meine.

    Wenn Du es schon weißt, warum gibst Du dir dann nicht einfach mehr Mühe beim Schreiben?

    Gruß,
      soenk.e