Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Hilfe bei Regex

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Hilfe bei Regex

    Hallo,

    ich habe folgenden Quelltext von einem Transaktions-Modul

    Code:
    		function xmlentities($string) {
    			/**
    			 * Only do the slow convert if there are 8-bit characters
    			 * avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that
    			 */
    			if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)){
    				return $string;
    			}
    			
    			/**
    			 * decode three byte unicode characters
    			 * @var unknown_type
    			 */
    			$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",
    				"'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",
    				$string);
    			
    			/**
    			 * decode two byte unicode characters
    			 * @var unknown_type
    			 */
    			$string = preg_replace("/([\300-\337])([\200-\277])/e",
    				"'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
    				$string);
    			
    			
    			return $string;
    		}
    folgendes Problem:
    Ich verstehe hier keine einziges Regex und die Funktion funktioniert nicht richtig. (Ich habe die Funktion nicht geschrieben, es war ein fertiges Modul für xtc)
    Der Fehler in der Funktion: Manche Zeichen (z.b. &, !, ", ', <, >, [ und ] bestätigt nur bei &, ob die anderen Fälle auch auftreten können weiß ich nicht) werden nicht gefiltert und durch die entsprechenden XML-Entitys bzw. Hexadecimal-Entitys ersetzt.

    Ich wollte hier den einfachsten Weg gehen und einfach 8 str_replace einbauen. Nur wo? Am Anfang? - Dann wird doch das Hex-Entity (z.b. &#x21; für !) auch decodiert???
    Am Ende? - Dann geht die Funktion beim 1. return raus und kommt gar nicht mehr zu meinen str_replace...

    Ich hoffe, ihr könnt mir helfen.

    LG

  • #2
    Hmm hast du allgemein keine Ahnung von Regexp? Oder verstehst du nur die oben stehenden Snibbel nicht?

    Kommentar


    • #3
      Allgemein ein wenig Ahnung und bei den obigen Snibbel versteh ich überhaubt nix.

      bzw. Ich will primär wissen wo ich meine str_replace einbauen soll. Zeit zum Regex lernen ist später

      Kommentar


      • #4
        Dann bau doch an beiden Stellen ein str_replace ein oder verschachtel so, dass du mit einer return - Anweisung auskommst.
        [URL]http://hallophp.de[/URL]

        Kommentar


        • #5
          Offenbar macht die Funktion irgendwas und liefert das Ergebnis mit " return $string " an das aufrufende Modul zurück. Wenn du $string also noch mit eigenen Methoden manipulieren willst, dann ist es sinnvoll, dass in den Zeilen vor den Returns zu tun.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Perfekt

            Habs 2x vor dem return eingebaut.

            Danke.

            Kommentar

            Lädt...
            X