# String zwischen bestimmten Zeichen verändern



## Mr. FISHMAN (9. Juni 2003)

Hallo,

ich habe folgendes Problem:
Ich möchte einen String verändern, aber nicht komplett sondern nur zwischen zwei "Grenzen".

$string = "Hallo Herr Ändernicht, [change]hätten sie kurz Zeit mir zu helfen mit den Käfig?[/change]";

und nun soll nur zwischen [change] und [/change] das ä zu ae,
da man ja zb Namen nicht verändern sollte.

In der Suche hab ich nichts gefunden was mir wirklich weiter hilft.
Vielleicht findet oder wist ihr ja eine Lösung oder könnt mir einen
Denkanstoß geben.

THX schon mal

Grtz MrF

P.S.: das [change],[/change] lösche ich nachher einfach mit str_replace() raus


----------



## Fabian H (10. Juni 2003)

So sollte es auch ohne dem nachträglichen Löschen von [change] per str_replace funktionieren:

```
function changetext($txt) {
  $txt = str_replace("ä", "ae", $txt);
  $txt = str_replace("A", "Ae", $txt);
  $txt = str_replace("ö", "oe", $txt);
  $txt = str_replace("Ö", "Oe", $txt);
  $txt = str_replace("ü", "ue", $txt);
  $txt = str_replace("Ü", "Ue", $txt);

  return $txt;
}

$text = preg_replace("/(\[change])(.*)(\[\/change\])/eisU", "changetext('$2')", $text);
```

Sollte funktionieren (ungetestet).


----------



## Mr. FISHMAN (10. Juni 2003)

Nein leider funktioniert das nicht ganz, aber trotzdem erstmal danke.

folgender Fehler:

<b>Warning</b>:  Unknown modifier 'c' in <b>/www/htdocs/v029183/page/admin/first.php</b> on line <b>223</b>

[223] $text = preg_replace("/([change])(.*)([/change])/eisU", "changetext('$2')", $text);

als beispiel hab ich folgendes damit versucht zu maskieren:

ä ü [change]ä ü [/change] ä ü

raus kam:

nichts 

ich weiß nicht genau was die Fehlermeldung bedeutet.

Kann mir einer helfen??


grtz MrF


----------



## Matthias Reitinger (10. Juni 2003)

```
$text = preg_replace("/\\[change\\](.*)\\[\\/change\\]/eisU", "changetext('\\$1')", $text);
```
Die entsprechende Zeile ersetzen, dann sollte es funktionieren. Allerdings auch nicht getestet


----------



## Fabian H (10. Juni 2003)

Sorry, das Board hats mal wieder zerhauen. So sollte es gehen:
*$text = preg_replace("/(\[change])(.*)(\[\/change\])/eisU", "changetext('$2')", $text)*


----------



## Mr. FISHMAN (10. Juni 2003)

mhm.. das funktioniert nun wunderbar....

ein Fehler noch:

Ergibniss: ä ü ae ue;  ä ü

wo kommt das ';' hinter ue her????


grtz MrF


----------



## Mr. FISHMAN (10. Juni 2003)

oops  sorry 

war mein Fehler hatte in der str_replace falsch getippt :|

Also ein super Dankeschön an euch.

hier nochmal die Lösung zusammengefasst:

function changetext($txt) {
  $txt = str_replace("ä", "ae", $txt);
  $txt = str_replace("A", "Ae", $txt);
  $txt = str_replace("ö", "oe", $txt);
  $txt = str_replace("Ö", "Oe", $txt);
  $txt = str_replace("ü", "ue", $txt);
  $txt = str_replace("Ü", "Ue", $txt);

  return $txt;
}


$text = preg_replace("/(\[change])(.*)(\[\/change\])/eisU", "changetext('$2')", $text);


----------

