While-Schleife reagiert unlogisch

Alles, was PHP betrifft, kann hier besprochen werden.

While-Schleife reagiert unlogisch

Postby isidor2706 » 10. June 2020 00:12

Mit dem folgenden PHP-Skript sollen in einer Zeichenkette das Zeichen "<" zu "&lt;" und das Zeichen ">" zu "&gt;" umgewandelt werden, jedoch reagiert die erste while-Schleife fehlerhaft, die zweite while-Schleife reagiert dagegen richtig. Ähnliche Fehler sind auch schon bei vier verschiedenen if-Anweisungen vorgekommen. PHP-Interpreter XAMPP Version 7.3.18, Betriebssystem Windows 10. Kann mir jemand dies erklären?

Code: Select all
<html>
<head>
</head>
<body>

<?php
   $TabellenFeldinhalt = "<tra<lala>>";
   echo bin2hex ($TabellenFeldinhalt) . "<br>";//Test

   $meldelt = 0;
   $posilt = strpos ($TabellenFeldinhalt, "<");
   echo "Lauf 1a: posilt = ".$posilt."<br>";//Test
   while (($posilt != FALSE) && (0 <= $posilt))//<--while reagiert fehlerhaft
   {
      $meldelt = 1;
      $teil1 = substr($TabellenFeldinhalt, 0, $posilt);
      $teil2 = "&lt;";
      $teil3 = substr($TabellenFeldinhalt, $posilt + 1);
      $TabellenFeldinhalt = $teil1 . $teil2 . $teil3;

      $posilt = strpos ($TabellenFeldinhalt, "<");
      echo "Lauf 1b: posilt = ".$posilt."<br>";//Test
   }
   echo "Lauf 1c: meldelt = ".$meldelt."<br>";//Test

   $meldegt = 0;
   $posigt = strpos ($TabellenFeldinhalt, ">");
   echo "Lauf 2a: posigt = ".$posigt."<br>";//Test
   while (($posigt != FALSE) && (0 <= $posigt))//<--while reagiert richtig
   {
      $meldegt = 1;
      $teil1 = substr($TabellenFeldinhalt, 0, $posigt);
      $teil2 = "&gt;";
      $teil3 = substr($TabellenFeldinhalt, $posigt + 1);
      $TabellenFeldinhalt = $teil1 . $teil2 . $teil3;

      $posigt = strpos ($TabellenFeldinhalt, ">");
      echo "Lauf 2b: posigt = ".$posigt."<br>";//Test
   }
   echo "Lauf 2c: meldegt = ".$meldegt."<br>";//Test

   echo bin2hex ($TabellenFeldinhalt) . "<br>";//Test

   /* Ergibt folgende Bildschirmanzeige:

   3c7472613c6c616c613e3e
   Lauf 1a: posilt = 0
   Lauf 1c: meldelt = 0
   Lauf 2a: posigt = 9
   Lauf 2b: posigt = 13
   Lauf 2b: posigt =
   Lauf 2c: meldegt = 1
   3c7472613c6c616c612667743b2667743b

   */
?>

</body>
</html>


Wenn die Meldung erscheint: "Lauf 1a: posilt = 0", ist die Bedingung für die erste while-Schleife erfüllt und diese Schleife müßte normalerweise mindestens ein Mal durchlaufen werden. Es müßte dann mindestens eine Meldung mit "Lauf 1b: posilt ..." erscheinen und anschließend: "Lauf 1c: meldelt = 1". Tatsächlich sieht es aber so aus, daß die Schleife kein einziges Mal durchlaufen wird. Kann es sein, daß mein PHP-Interpreter fehlerhaft ist?
isidor2706
 
Posts: 10
Joined: 16. January 2016 00:00
Operating System: Windows 10

Re: While-Schleife reagiert unlogisch

Postby JJ_Tagy » 10. June 2020 00:56

Ich bin nicht sicher, aber vielleicht müssen Sie überprüfen, ob es "gleichwertig" ist ($posigt !== FALSE).

Stattdessen können Sie die Funktion str_replace() nutzen.
JJ_Tagy
 
Posts: 780
Joined: 30. January 2012 13:44
XAMPP version: 5.5.15
Operating System: Windows 10 Pro x64

Re: While-Schleife reagiert unlogisch

Postby isidor2706 » 10. June 2020 12:57

Oh Wunder, der Tipp hat tatsächlich geholfen! Es war mir bisher nicht bewußt, daß es einen funktionalen Unterschied zwischen != und !== gibt. Vielen Dank!
isidor2706
 
Posts: 10
Joined: 16. January 2016 00:00
Operating System: Windows 10


Return to PHP

Who is online

Users browsing this forum: No registered users and 11 guests