Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo!

Kann mir jemand erklären wie ich dynamisch Werte / Variablen / Strings wie ich sie unten aufgelistet habe, durch einen einfachen '-' zu ersetzen ? (mit php)

Also nur zur Info, die Variablen / Strings kenne ich nicht vorher, da sie jedesmal verschieden sein können (das ist ja die Schwierigkeit an der Sache!):

z.bsp:

@@@testtest@@@

oder

@@@bla111blabla11122@@@

oder

@@@1_vorname@@@

oder

@@@5_strasse@@@

etc. usw.

Und nun möchte ich diese einzelnen Strings quasi mit einem einfachen '-' ersetzen. Da sie jedoch variieren und ich die Länge der Strings nicht sagen kann, kann ich ja auch kein einfaches str_replace einsetzen... oder???? Man müsste quasi ein script haben, dass nach dem hier sucht: '@@@' (jeweils am Anfang und am Ende eines Strings) und diese @'s und den Text der dazwischen steht (dessen Länge variiert), ersetzt.

Bitte helft mir :rolleyes:

DANKE IM VORAUS !!!!

Geschrieben

hi,

ich verstehe nicht ganz, was du willst.:confused:

Willst du nur die'@@@' ersetzen?

Dann kannst du ja str_replace() benutzen. Diese Funktion brauch keine Stringlänge. Die ersetz einfach alle '@@@' durch dienen String.

str_replace('@@@','dein String',$string);

Die Länge des Strings bekommst du mit strlen().

Geschrieben

Mahlzeit!

Zunächst tust du den Text, der bearbeitet werden soll in eine Variable, meinetwegen $text.

Dann nehmen wir die Methode pre_replace(). Die Syntax ist preg_replace($patterns, $replace, $text).

Für deine Ansprüche müsste es also heissen:

preg_replace("@@@.*@@@", "-", $text);

Danach hast du statt der beschriebenen (seltsam markieren) Strings einfache "-". Wenn der String nur allein in einer Zeile vorkommen kann/darf, dann geht das:

preg_replace("^@@@.*@@@$", "-", $text);

Das "Dach" bezeichnet den Anfang einer Zeile, das "$" das Ende.

Mit Regulären Ausdrücken kann man aber noch unendlich mehr. Such mal nach nem guten Tutorial (zum Bleistift bei Google [suchbegriffe schon im Link drin!])

Tschö,

Florian

Geschrieben
Originally posted by palvoelgyi

ich mache das immer so.

$beitrag = eregi_replace("\\[@@@]([^\\[]*)\\[@@@\\]","ersetzter string",$beitrag);

Hallo Frank!

Die Zeichen in den eckigen Klammern werden als Menge gesehen. Wenn du also [123] suchst findet er "123" und "321" und "213". Wofür steht das "([^\[]*)" eigentlich? Meine Interpretation ist: eine Menge bestehen aus "^\[", also am Anfang der Zeile mit "[" beginnend, und das in beliebiger Folge ("*").

Bin leicht verwirrt,

Florian

PS: @ Kathi: Stimmt! *lol* Den ganzen Text auf "-" reduzieren! ;) -- Naa, ich geh mal davon aus, dass es auch Zeilen in dem Text geben soll, die nicht ersetzt werden sollen.

Geschrieben

Nun, es klappt leider noch nicht. Dazu kurz zu dem Sinn und was das Ganze überhaupt soll:

Ich bekomme von einem PDF-Formular Daten / Variablen, die mein PHP-Script empfängt und weiterverarbeitet. Ich habe in meiner Datenbank ein Feld 'body', in welchem der Text steht, der später per eMail versendet wird.

In diesem Text hat man die Möglichkeit Variablen anzugeben, so könnte also der Inhalt des Tabellenfeldes 'body' aussehen:

--------------------------------------------------------------------------------------------

Hallo @@@vorname@@@ @@@nachname@@@

Wie geht es Dir?

Du hast im PDF-Formular folgende Angaben gemacht:

Alter: @@@alter@@@

Strasse: @@@strasse@@@

--------------------------------------------------------------------------------------------

So, da nun leider Gottes das PDF-Formular die NICHT AUSGEFÜLLTEN Eingabefelder (genauergesagt die Checkboxen, bei Eingabefeldern kommt wenigstens der Feldname an :)) ÜBERHAUPT NICHT übermittelt (nicht einmal der Name des Feldes wird gesendet, geschweige denn der Wert) werden, MUSS ich diese nicht von meinem PHP-Script ersetzten Variablen wie z.Bsp. @@@alter@@@ entsprechend durch ein '-' Zeichen ersetzen. (Übrigens: Die somit zusammengesetzten Daten werden per eMail an den Benutzer verschickt)

So ich habe das hier auch eingefügt:

$pdfform_body = eregi_replace("\@@@([^\[]*)\@@@","-",$pdfform_body);

Er ersetzt aber NUR das erste im Text / Template vorkommende @@@variabler_name@@@, auf das obige Beispiel bezogen würde das also heissen, er ersetzt NUR @@@alter@@@ und alle nachfolgenden @@@strasse@@@ werden einfach gelöscht, bzw ersetzt durch " " (kein Wert).

Muss ich irgendwas mit ner Schleife machen ???? Danke schon mal für eure Hilfe !!!!

Geschrieben
Originally posted by Florian_K

Für deine Ansprüche müsste es also heissen:

preg_replace("@@@.*@@@", "-", $text);

Danach hast du statt der beschriebenen (seltsam markieren) Strings einfache "-".

Wenn der String nur allein in einer Zeile vorkommen kann/darf, dann geht das:

preg_replace("^@@@.*@@@$", "-", $text);

Das "Dach" bezeichnet den Anfang einer Zeile, das "$" das Ende.

DAS GEHT NICHT! ES KOMMT EIN FEHLER:

"Warning: No ending delimiter '^' found in ... "

!!!

Geschrieben

Hui! Also ich glaube ich hab die Lösung:

$text = preg_replace("/@@@(.*)@@@/iUs", "-", $text);

Fragt mich jetzt aber NICHT was das zu bedeuten hat, verstehen tu ich's nicht :D aber es funktioniert :P

Danke euch allen :bimei

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...