problem mit regulären expression

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

  • problem mit regulären expression

    hallo,

    durch ein script, werden sonderzeichen in html code ersetzt. das problem ist das hierbei auch die anführungszeichen im img tag auch konvertiert werden, was aber nicht sein soll.
    hier hab mir eine reguläre expression dazu gebastellt, aber es klappt nicht, und ich komme nicht weiter. das ganze sieht bis jetzt so aus:
    PHP-Code:
    $search "(<img)(&quot;)(>)";
    $replace "'";
    $text eregi_replace($search$replace$text); 
    ich will das alle &quot; innerhalb des img tags in ' ersetzt werden.
    Erfahrungen vererben sich nicht jeder muss sie allein machen.

  • #2
    Stopp stopp stopp! Was du da machst ist Reparatur, aber du solltest da ansetzen, wo der Schaden entsteht. "Durch ein Script werden Sonderzeichen in HTML Code ersetzt ... hierbei auch die Anführungszeichen im img Tag". Im Klartext: Dieses Script macht das HTML kaputt. Also muss das Script geändert werden. Das ist viel sinnvoller.

    Wie konvertiert das Script denn die Sonderzeichen?

    Kommentar


    • #3
      da hast du natürlich recht. das script ist sehr simpel:

      PHP-Code:
      $suche[] = '/ä/';
      $suche[] = '/Ä/';
      $suche[] = '/ö/';
      $suche[] = '/Ö/';
      $suche[] = '/ü/';
      $suche[] = '/Ü/';
      $suche[] = '/\"/';
      $suche[] = '/»/';
      $suche[] = '/«/';
      $suche[] = '/©/';
      $suche[] = '/–/';
      $suche[] = '/€/';


      $ersetze[] = '&auml;';
      $ersetze[] = '&Auml;';
      $ersetze[] = '&ouml;';
      $ersetze[] = '&Ouml;';
      $ersetze[] = '&uuml;';
      $ersetze[] = '&Uuml;';
      $ersetze[] = '&quot;';
      $ersetze[] = '&raquo;';
      $ersetze[] = '&laquo;';
      $ersetze[] = '&copy;';
      $ersetze[] = '&ndash;';
      $ersetze[] = '&euro;';

      $text preg_replace($suche$ersetze$text); 
      ich wüste jetzt aber nicht wie ich es anstellen sollte das dabei kein html code verändert wird. bin mit regulären expression nicht so fit
      Erfahrungen vererben sich nicht jeder muss sie allein machen.

      Kommentar


      • #4
        Wie wäre es denn mit htmlentities($text, ENT_NOQUOTES)?

        Kommentar


        • #5
          Wie wäre es denn mit den Bullsh*t lassen, und einfach eine passende Zeichenkodierung verwenden ...?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Wie wäre es denn mit htmlentities($text, ENT_NOQUOTES)?
            das habe ich als erstes probiert. nur ersetzt htmlentities alle zeichen. auch html code. aus <p> wird dann z.b. &lt;p&gt;
            also nicht wirklich das ware.

            @wahsaga
            weil das da nicht so einfach möglich ist. man muss ja immer abwägen zwischen aufwand/nutzen
            deswegen wäre es mit regulären expressionen am einfachsten.
            Erfahrungen vererben sich nicht jeder muss sie allein machen.

            Kommentar


            • #7
              Dann kombiniere es halt noch mit str_replace(). Oder streich halt " aus deiner preg_replace-Variante.
              Der Aufand für eine passende Kodieruneg wäre übrigens marginal - reicht schließlich ein einziges header().

              Kommentar


              • #8
                es ist leider nicht möglich das " zu entfernen. muss drin sein.

                >> Dann kombiniere es halt noch mit str_replace()
                was würde das bringen? ist doch das selbe

                ich will doch nur wissen wie die reg ex richtig aussehen muss. das hier funktioniert ja nicht: $search = "(<img)(&quot(>)";
                ich weiß, das ist eine bullshit lösung, aber ich mache das für einen bekannten. und da will ich jetzt nicht mehr energie als nötig da rein stecken. aber ich hab bis jetzt schon zu viel zeit investiert (was nicht mein plan war)

                nachtrag:
                ich geh jetzt mal den anderen weg. bevor die zeichen in html codes umcodiert werden, versuche ich alles was in tags als " eingetragen ist in ' umzuwandeln (die normalen hochkommas werden nicht codiert). bis jetzt bin ich so weit:
                $text = preg_replace("/(<\/?)(\"+)([^>]*>)/e", "'", $text);
                nur bei (\"+) hängt es. wie muss ich das richtig eintragen damit alle " in ' convertiert werden?
                Zuletzt geändert von joextra; 15.07.2009, 12:41.
                Erfahrungen vererben sich nicht jeder muss sie allein machen.

                Kommentar


                • #9
                  es hat sich erledigt. das hier ersetzt alle " durch ' (für diejenigen denen es interessiert):
                  PHP-Code:
                  $text preg_replace('/<([^<>]+)>/e''"<" . str_replace("\\\\"", \'\\\'\', "$1") . ">"'$text); 
                  Erfahrungen vererben sich nicht jeder muss sie allein machen.

                  Kommentar

                  Lädt...
                  X