suchen und ersetzen mit Zeichenketten

wal

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem:
Ich suche in einer HTML Seite nach einem bestimmten Formular (einer Checkbox) werte diese aus und möchte diese dann setzen (checked).

Das Problem dabei ist, dass diese Zeile nicht ersetzt wird, da etwas mit meiner Zeichenkette nicht stimmt. Da ich nicht nur eine Checkbox so abfragen möchte, erstelle ich ein Array.

Die Zeile, die ich in HTML ersetzen möchte sieht wie folgt aus:

Code:
<input name="neu_account_wf" type="checkbox" id="neu_account_wf" value="Neuer Account Image &amp; Workflow">

Der PHP Code um diese Ziele zu finden und zu ersetzen sieht so aus:

PHP:
...
$fp=fopen($fileName,"rb");
$s_Inhalt=fread($fp, filesize($fileName));
fclose($fp);
...
$checkbox=Array("neu_account_wf");
...
for ($i=0; $i<sizeof($checkbox); $i++){
   if (isset($_REQUEST[$checkbox[$i]])!=""){
      $muster="<input name=\"".$checkbox[$i]."\" type=\"checkbox\" id=\"".$checkbox[$i]."\"(.*)>/U"; 
      $replace="<input name=\"".$checkbox[$i]."\" type=\"checkbox\" id=\"".$checkbox[$i]."\"\\\\1 checked=\"checked\">"; 
      $s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
   }	
}

Leider wird die Zeile nicht ersetzt, irgendetwas muss mit der Syntax nicht stimmen. Wenn ich anstatt dem (.*) den kompletten Text hinschreibe funktioniert es. Aber das es um viele Checkboxen handelt, müsste ich dies für jede extra machen - daher das Array und die Funktion.

Vielleicht hat jemand von euch eine Idee oder einen Tipp was daran falsch sein könnet?!

Vielen Dank schon mal vorab, für eure Hilfen!
 
Moin

Was hat in deinem $muster das "(.*)>/U" verlohren?
Das "\\l" im $replace peile ich auch nicht. Naja, egal.
Lass am Ende vom $muster einfach das Schließen vom input weg (also das ">") dann kann da ruhig noch alles mögliche nach der id stehen...
Naja, und das (.*)/U-Zeug auch weg.
Das selbe Spiel am Ende von $replace. Mit dem \\l musst du wissen. Hat keinen Einfluss auf irgendwas.

Der Code:
PHP:
$filename="test.htm";
  $fp=fopen($filename,"rb");
  $s_Inhalt=fread($fp, filesize($filename));
  fclose($fp);
  
  echo "Vorher:   <br />".$s_Inhalt."<br /><br />\n";

  $checkbox=Array("neu_account_wf");

  for($i=0; $i <sizeof($checkbox); $i++){
//    if (isset($_REQUEST[$checkbox[$i]])!=""){
      $muster="<input name=\"".$checkbox[$i]."\" type=\"checkbox\" id=\"".$checkbox[$i]."\"";
      $replace="<input name=\"".$checkbox[$i]."\" type=\"checkbox\" id=\"".$checkbox[$i]."\"\\l checked=\"checked\"";
      $s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
  //  }
  }

  echo 'Nachher:  <br /> '.$s_Inhalt;

Der echo-Krempel ist nur zur Überprüfung. Das isset() habe ich auskommentiert, weil ich ja keine Übergabe oder sowas hatte.

Hoffe, ich konnte dir helfen.

MfG

Ollek81
 
Hallo ollek81,

danke für deine Antwort - werde sie mal ausprobieren. :)

P.S.: Das (.*) liest alle Daten zwischen " und > und mit \\1 setze ich diese Daten wieder ein ... jedenfalls hat das bis jetzt immer so funktioniert.
 
Original geschrieben von wal
P.S.: Das (.*) liest alle Daten zwischen " und > und mit \\1 setze ich diese Daten wieder ein ... jedenfalls hat das bis jetzt immer so funktioniert.
Aber unter Garantie nicht bei str_replace. Du wolltest ereg_replace benutzen.

Peter

//edit: hihi, mist. der tim war schneller :p und ja, preg_replace war besser als ereg_replace... :)
 
Zuletzt bearbeitet:
Zurück