CBRchen: Email Adresse aus Text lesen und löschen

Hallo :)

Also ich habe ja schon brav gesucht, allerdings mein Problem nicht lösen könne.

Das Problem:

In einem Formular kann der Besucher einen Text eingeben.
In diesem Text sollen keine Emil-Adressen oder URLs stehen (hält sich natürlich nicht jeder dran).

Wie kann ich nun aus einem Text eine Email-Adresse (oder URL) auslesen, löschen und den Text bestehen lassen.

z.B.:

Aus dem Text:
"...blabla. Man kann mich unter test@mail.de erreichen und natürlich auch beim nächsten Treffen."

...soll der Text werden:
"...blabla. Man kann mich unter erreichen und natürlich auch beim nächsten Treffen."

Mir ist klar das der Text nun etwas seltsam aussieht.
Vielleicht wäre es ja auch eine Lösung "test@mail.de" durch "XXX" zu ersetzen.

Mir ist klar das ich mit str_replace einzelne Zeichen oder bekannte Zeichenketten ersetzen kann.

Wie aber mache ich das bei einer Email-Adresse, wo mir ja nur das "@" bekannt ist und nicht was davor oder dahinter steht.

Bei einer URL kann man ein "http://www." annehmen, vielleicht aber auch nur ein "www.".

Ginge da auch ein "www.(hier irgendwas).de/com/org/etc" ?

Hhm, ich hoffe das liest und versteht jemand der nur halb so verwirrt ist wie ich.

Besten Dank !

  1. Hallo CBRchen,

    mit meinem begrenztem PHP Wissen würde ich folgendes machen:

    • Text mit explode in ein array einlesen
    • Arrayelemente mit for-schleife durchlaufen
    • überprüfen der arrayelemente ob mail adresse oder url
    • ggf. dann das element löschen.
    • am ende die restlichen arrayelemente ausgeben.

    fertig.

    find ich irgendwie umständlich, aber wie schon gesagt, mit meinem begrenztem PHP Wissen. Da gibt es bestimmt noch bessere lösungen  ^^

    ungefähr so könnte das dann ausschauen.

    $array = explode (" ", $text);
    for (i=1;i<count($array);i++) {
        // Hier die Überprüfung der elemente & ggf löschen des elements
    }

    gibt genügend funktionen im internet um auf E-Mail oder URL zu prüfen ... Am besten mal bei google nachfragen.

    Gruß,
    Alex.

    1. find ich irgendwie umständlich, aber wie schon gesagt, mit meinem begrenztem PHP Wissen. Da gibt es bestimmt noch bessere lösungen  ^^

      um dein begrenztes wissen zu erweitern: preg_replace() ist vermutlich das, was du suchst ;)

  2. Mahlzeit CBRchen,

    Wie aber mache ich das bei einer Email-Adresse, wo mir ja nur das "@" bekannt ist und nicht was davor oder dahinter steht.

    Bei einer URL kann man ein "http://www." annehmen, vielleicht aber auch nur ein "www.".

    Ginge da auch ein "www.(hier irgendwas).de/com/org/etc" ?

    Du kannst mit regulären Ausdrücken nach Mustern in einem Text suchen bzw. die gefundenen Muster auf nahezu beliebige Art ersetzen. Auch in PHP gibt es zuhauf Funktionen zu diesem Thema ... lies Dich in die Grundlagen ein, versuche die Beispiele nachzuvollziehen, google zu dem Thema, schau ins Forumsarchiv und wenn Du konkrete Fragen hast, stelle sie.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. echo $begrüßung;

    In einem Formular kann der Besucher einen Text eingeben.
    In diesem Text sollen keine Emil-Adressen oder URLs stehen (hält sich natürlich nicht jeder dran).

    Es halten sich auch nicht alle an die von dir berücksichtigten Schreibweisen. "de punkt selfhtml punkt org" oder "forum at selfhtml punkt org" wirst du wohl kaum noch mit handhabbar automatisch filtern können.

    Wie kann ich nun aus einem Text eine Email-Adresse (oder URL) auslesen, löschen und den Text bestehen lassen.

    Reguläre Ausdrücke sind für genau definierte Muster geeignet. Und es gibt die Funktion preg_replace().

    echo "$verabschiedung $name";

    1. Reguläre Ausdrücke sind für genau definierte Muster geeignet.

      das problem ist, das mail-addessen nicht genau definiert sind sondern offen definiert sind - ein regulärer ausdruck der JETZT auf alle möglichen mailadressen passt ist ellenlang, einer der ale zukünftigen erfasst quasi unmöglich

      das einzige was du quasi prüfen kannst ist in etwa /+*@+*/

      blah@example ist genauso eine gültigemailadresse wie diese hier http.www.example.com@http.de.www.example.org - zweiter könnte von einem schlechten regulären ausdruck als url erkannt werden

      http://user:pass@example.com/ ist übrigens ein gültiger url und könnte von einem nicht korrekten regulären ausdruck als mailadresse erkannt werden

      1. in etwa /+*@+*/

        sollte heissen .+@.+

  4. Moin!

    Also ich habe ja schon brav gesucht, allerdings mein Problem nicht lösen könne.

    Du glaubst, es liegt an deinem noch mangelhaften Wissen über reguläre Ausdrücke.

    Ich glaube, es liegt an der grundsätzlichen Unmöglichkeit, menschliches Verhalten "programmierbar" zu machen.

    Das Problem:

    In einem Formular kann der Besucher einen Text eingeben.
    In diesem Text sollen keine Emil-Adressen oder URLs stehen (hält sich natürlich nicht jeder dran).

    Wie kann ich nun aus einem Text eine Email-Adresse (oder URL) auslesen, löschen und den Text bestehen lassen.

    Wenn du den Text hinterher niemandem zeigst, könnte dein Ansatz funktionieren, die Mailadressen und URLs rauszulöschen. Aber wem wäre dann damit geholfen?

    Wenn hingegen der Autor des Textes hinterher einen kontrollierenden Blick auf sein Werk wirft und die fehlenden Adressen erblickt, wird er es entweder darauf beruhen lassen, oder zu alternativen Schreibweisen greifen.

    Bei Mailadressen wäre alternativ zu "mailbox@example.com" denkbar, dass man "mailbox(at)example.com" schreibt, oder "mailbox at example dot com" - oder sonst irgendeine Variante, die den Ersteller dieser für Menschen lesbaren Kreation davor schützt, dass Spambots die Adresse ebenso leicht erfassen können.

    Und genau sowas, nämlich den Part "Mailadressenerkennung", den auch ein Spambot benötigt, willst du jetzt programmieren. Das wird schwierig bis unmöglich.

    Das gleiche Spielchen spielt sich natürlich bei den URLs ebenso ab. Du kannst alle dir bekannten Schreibweisen erfassen und filtern, aber gegen die Kreativität von Menschen kommt dein Programm nicht an.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hi!

      Dem kann ich nur zustimmen. Der TE hat scheinbar noch nie ein onlinespiel gespielt. Als Paradebeispiel nehm ich mal das allseits beliebte ;) WoW. Dort jammern die Spieler schon lange uber massives gespamme von Goldverkaeufern und aehnlichem. Der Hersteller (Blizzard) hat also reagiert und filtert nun. Das Problem: Es wird fleissig weitergespammt und die Spieler noelen noch immer. Das einzige, was sich veraendert hat, ist, dass eben jene Spammer zu Mitteln greifen, die es einem schwierig machen einfach per copy & paste die URL zu besuchen. Selbst wenn man bestimmte Begriffe filtert wird das umgangen. Es gibt schlicht keinen Schutz. Filter treffen auch immer nur die unschuldigen. Wenn ich jemand beschimpfen will dann kann ich das auch, wenn mir bestimmte Worte weggefiltert werden. Ich schreib sie halt anders oder weiche auf andere worte aus. Beispiel 'Arsch': Ich will dich beleidigen und schreibe 'A.rsch'. Du willst deinen Fischfang im MMO verkaufen und alle lesen: 'Verkaufe Stack B@$#%= fuer 2G.' Okay. Also Arsch nur filtern, wenn es allein steht? Saftarsch, Arschloch, ...' Es geht nicht.

      (sorry fuer die Kraftausdruecke)

      Genauso bei Webadressen:
      Man filtert Webadressen anhand eines einfachen www.-filters (schonmal grundsaetzlich boed)
      Spammer: example.org/gold
      Man filtert alles was irgendwie nach URL aussieht
      Spammer: example(dot)org/gold, example . org/gold, ... Man filtert bestimmte Begriffe die in den einschlaegigen URLs vorkommen.
      Spammer: exam ple.org/go ld
      (zur Not auch mit Anleitung was man ersetzen muss)

      Es gibt genau ZWEI Methoden um sowas zu unterbinden:
      Jeder Eintrag wird manuell ueberprueft.
      Man entwickelt ne kleine echte KI und verdient sich nen goldenen Ast.

      --
      Trau Dich!