Freakie: Merkwürdige Probs bei str_replace() und fgets()

Diesmal bin ich mit meinem Latein am Ende. Nach längerer Fehlersuche (auch zusammen mit einem erfahreneren Chatpartner von mir) bin ich einfach nur noch verwirrt. Ich hab hier mal einen Ausschnitt des Codes, der mich so verwirrt.

if (file_exists("smilies/smilies.txt")) {
    $datei = fopen("smilies/smilies.txt", "r");
 if ($datei) {
   while (!feof($datei))
   {
     $i++;
     $zeile = fgets ($datei);
  $smsearch[$i-1] = $zeile;
  $smreplace[$i-1] = "<img src="smilies/".$i.".gif">";
   }
   fclose ($datei);
 }
  }
$vari = "Wäre ich ein Holzfäller, so müßte ich Bäume fällen. :) :D :( ;) 8)";
for($x=0;$x<2;$x++){
  $vari = str_replace($smsearch[$x],$smreplace[$x],$vari);
}
echo $vari;

Hier funzt der Code nicht. Der Inhalt der $zeile ist korrekt, auch der Inhalt der beiden Arrays ist exakt so, wie er sein soll. Jedoch werden :) und :( (die Smileys, die eigentlich ersetzt werden müssten) nicht ersetzt. Interessant wird es dann wenn ich den Code der While-Schliefe minimal abwandel.

$smsearch[$i-1] = ":)";
$smreplace[$i-1] = "<img src="smilies/".$i.".gif">";

Schon wird ":)" korrekt ersetzt. Jetzt könnte man meinen, es läge nur am fgets, tut es aber nicht. Denn bei folgendem Code funktioniert das Ersetzen ebenfalls.

$zeile = fgets ($datei);
$smsearch[1] = $zeile;
$smreplace[1] = "<img src="smilies/".$i.".gif">";

Spätestens jetzt bin ich völlig verwirrt, und hoffe, das ihr mir irgendwie helfen könnt... Denn dieses Problem krieg ich leider nicht mehr gelöst.

mfg Freakie

  1. Hallo Freakie,

    $i++;

    vielleicht liegt es daran, dass du $i vorher nie einen Wert zuweist - somit weiß php auch nicht, zu was 1 addiert werden soll.

    $zeile = fgets ($datei);

    warum nimmst du nicht file()?

    $smreplace[$i-1] = "<img src="smilies/".$i.".gif">";

    du weißt, dass das ungültigen Code erzeugt? (das alt-Attribut fehlt)

    Hier funzt der Code nicht.

    das wär ja noch schöner, wenn der Code noch das furzen anfangen würde... *scnr*

    aber vielleicht meinst du ja "Hier funktioniert der Code nicht"? Wenn ja: was funktioniert nicht? Fehlermeldung? Verhalten soll/ist?

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. vielleicht liegt es daran, dass du $i vorher nie einen Wert zuweist - somit weiß php auch nicht, zu was 1 addiert werden soll.

      Bei undefinierten Integerwerten geht PHP immer von 0 aus. Folglich addiert er 1 zu 0, Ergebnis 1.

      $zeile = fgets ($datei);
      warum nimmst du nicht file()?

      *ausprobiert* Funzt! Vielen Dank :D!

      $smreplace[$i-1] = "<img src="smilies/".$i.".gif">";
      du weißt, dass das ungültigen Code erzeugt? (das alt-Attribut fehlt)

      Weiss ich, sobald der PHP-Code läuft werde ich mich auch ums HTML kümmern. Aber das ist im Moment für mich noch nebensächlich.

      Hier funzt der Code nicht.
      das wär ja noch schöner, wenn der Code noch das furzen anfangen würde... *scnr*

      Funzen ist ein im Internet halbwegs gängiger Begriff für funktionieren ;). Sry, wenn du ihn nicht kanntest ^^...

      aber vielleicht meinst du ja "Hier funktioniert der Code nicht"? Wenn ja: was funktioniert nicht? Fehlermeldung? Verhalten soll/ist?

      Die Textsmileys werden nicht wie gewünscht durch den <img>-code ersetzt.

      Grüße aus Nürnberg
      Tobias

      Grüße zurück
      Freakie

      PS: Trotzdem irritiert mich das merkwürdige Verhalten der alten Version, wenn da wer hinterkommen würde wär schön, auch wenn ich dank Tobias jetzt ne LÖsung habe ^^...

      1. Hallo Freakie,

        vielleicht liegt es daran, dass du $i vorher nie einen Wert zuweist - somit weiß php auch nicht, zu was 1 addiert werden soll.
        Bei undefinierten Integerwerten geht PHP immer von 0 aus. Folglich addiert er 1 zu 0, Ergebnis 1.

        wirklich? das wusste ich noch nicht, danke.

        Hier funzt der Code nicht.
        das wär ja noch schöner, wenn der Code noch das furzen anfangen würde... *scnr*
        Funzen ist ein im Internet halbwegs gängiger Begriff für funktionieren ;). Sry, wenn du ihn nicht kanntest ^^...

        natürlich kenn ich das Wort - ich kann es nur nicht leiden :-) (lies dazu auch mal http://www.andreas-waechter.de/Spass/Sprachliches.html#funzen :-))

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Moin!

          Bei undefinierten Integerwerten geht PHP immer von 0 aus. Folglich addiert er 1 zu 0, Ergebnis 1.
          wirklich? das wusste ich noch nicht, danke.

          Das ist nichts, was man wissen muß.

          Denn bei undefinierten Werten und register_globals=on reißt man sich wunderschöne Sicherheitslücken auf, weil jeder Angreifer ganz leicht per URL-Parameter "?i=3" angehängt den Startwert der Variablen setzen kann.

          Deshalb: Variablen _IMMER_ initialisieren. Kann ja auch sein (und wir sehen hier ja nicht den ganzen Code), dass $i (eine beliebte Variable) vorher schon mal benutzt wurde.

          Initialisieren ist einfach ein guter Programmierstil, der blöde Fehler vermeiden hilft.

          - Sven Rautenberg

          --
          SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
          ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|