ganzen Satz im String

  • Warum nicht gleich so ne Antwort.

    Besten Dank läuft jetzt ohne Fehler.

    Habe Zwar kein Satz genommen sondern minus und + 100 Zeichen ,aber erfüllt sein zweck.


    Edit mit einfärben des Suchwortes

  • Da steht trotzdem nix von strpos() und stripos().

    Und wie man in Post 1 sieht gehe ich die ganze Zeit schon 200 Zeichen vor und versuche gar nix mit Satzzeichen.

    Das mit den Satzeichen geht ja auch,aber wie du schon sagtest findet er halt nicht immer ein ganzen Satz. Also bleibt es bei + und - zeichen

  • Ja aber ab und zu hilft ein denk anstoß und schon gehts

    Dein Denkanstoß war schon dein JavaScript, denn da machst du doch vom Prinzip her nichts anderes. :(


    Darin bestimmst du doch auch die Start- und Endpostion des String, der ausgeschnitten werden soll. Also einfach mal einen Blick in die PHP-Doku unter String-Funktionen werfen und Bingo!!!

  • genau.Das JS lief ja. deswegen habe ich auch versucht das in Php zu schreiben und es versucht zu ergoggeln. Dann kam ich auf die veralteten functionen und schon wahren die Probleme da.

    Hätte ich gleich das richtige gefunden hätte das Thema wohl gar nicht eröffnet werden müßen.

  • Na Jungs,schon am Kotzen wenn ihr mein Namen bei php sieht??

    Na ja ich versuchs trotzdem mal.

    Der Code von wem wir die ganze Zeit geredet haben läuft ja jetzt und zwar ohne Fehler.

    Wenn ich "hallo" schreibe findet er alles mit hallo und makiert es farblich.

    Schreibe ich "HalLO" so ,also klein und groß egal wie ,findet er auch alle mit hallo ,aber makiert es nicht farblich.

    Verstehen tue ich es nicht ganz,obwohl man das von Js ja auch kennt und dafür eine function gibt.

    Wie heißt die Php? Bzw wo muß ich den einfügen ?

    Code
    1. $rein=substr($row['inhalt'], strrpos(substr($row['inhalt'], 0, stripos($row['inhalt'], $a3)), " "), 200).'<br>';
    2. $rein1= htmlspecialchars ($rein);
    3. $suchmuster = $a3;
    4. $ersatz = '<span style="background-color:rgb(55,255,0);">'.$a3.'</span>';
    5. $text = str_replace($suchmuster, $ersatz, $rein1);

    Wenn ich das richtig sehe muß doch eigentlich alles Farblich makiert sein egal wie geschrieben,weil ich die farbe doch direkt beim Suchwort eingebe. also $a3=$_POST['suchwort'];


    Oder übersehe ich da irgendwas?

    EDIT: Kleine korektur.Er makiert nur die Wörter wie man sie eingegeben hat.Soll aber auch die Wörter makieren die anders geschrieben werden.Also groß und klein,oder durcheinander.


    Finden tut er trotzdem immer alles,egal wie geschrieben

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von basti1012 ()

  • Zitat

    $rein=substr($row['inhalt'], strrpos(substr($row['inhalt'], 0, stripos($row['inhalt'], $a3)), " "), 200).'<br>';


    Irgendwo fehlt mindestens ein strtolower oder strtoupper.


    Die Zeile sieht zwar gut geschrieben aus, aber zum Nachvollziehen eine Katastrophe. Wenn andere das auf die Schnelle verstehen sollen (oder man selbst), hilft es sehr, die einzelnen Teile in einzelne Variablen zu zerlegen. Ausserdem lässt sich damit jede Komponente besser debuggen.

    'Wenn alles klappt, kann man das so schreiben wie oben.

  • Das liegt daran, dass du mit der Funktion 'stripos()' unabhängig von Groß- Kleinschreibung das Suchwort suchst und findest - es werden also alle Varianten gefunden.

    Dann erstellst du ein 'Suchmuster', dass wieder der Schreibweise deiner Eingabe entspricht (?) und machst dann mit str_replace() einen Austausch des Suchmusters mit dem Ersatz-String. str_repace() beachtet aber die Groß- Kleinschreibung, also vermute ich, dass dann die abweichend geschriebenen Wörter nicht ausgetauscht werden.

    Versuche es mal mit str_ireplace() - das ist die Groß- Kleinschrift unabhängige Variante von str_replace().

    http://php.net/manual/de/function.str-ireplace.php

  • Ja das ist schon besser,aber noch läuft was Falsch.

    Er markiert das Suchwort jetzt egal wie ich es schreibe.Aber jetzt wird das Originale Wort im Text mit meinen $_POST['suchwort'] ausgetauscht und nicht mehr das Originale angzeigt.


    Achman nur nee kleinigkeit aber macht mein Gehirn kaputt.

    Ich denke jetzt bestoimmt wieder Falsch,aber muß ich jetzt vorm Makieren das Suchwort da irgendwie mit split (JS-NAME) aus den Origiinal Text rausholen? Oder Regex? Oder wie würdest du es machen.



    EDIT mal was anderes

    der Code von mir

    Code
    1. $rein=substr($row['inhalt'], strrpos(substr($row['inhalt'], 0, stripos($row['inhalt'], $a3)), " "), 200).'<br>';

    besagt doch ,gehe 0 Zeichen vom gefundenen Suchwort zurück und 200 nach vorne ,richtig ?

    Zumindest kommt es bei mir immer so raus.


    Nur eins passt da irgendwie nicht ,weil die null eine 12 ca ergibt . wenn ich aus der 0 eine 20 machen sind ca 32 Zeichen vor den Suchwort. Bei einer 0 sind ca 12 Zeichen davor.

    Also das Suchwort steht nie am Anfang. Da ist doch bestimmt ein Wurm drinne ,oder wird da irgendwas gezählt was ich nicht kenne ?

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von basti1012 ()

  • der Code von mir

    Code
    1. $rein=substr($row['inhalt'], strrpos(substr($row['inhalt'], 0, stripos($row['inhalt'], $a3)), " "), 200).'<br>';

    besagt doch ,gehe 0 Zeichen vom gefundenen Suchwort zurück und 200 nach vorne ,richtig ?

    Den hast du doch bestimmt irgendwo her kopiert, denn sonst wüsstest du es ja.


    Und wenn du dieses zusammengesetzte Chaos in einzelne Teile zerlegst, findest du auch die Textteile, die Farblich markiert werden sollen, ohne auf Groß/Kleinschreibung zu achten.

  • Mal Eines nach de Anderen...

    Die 'Urform' der Funktion substr() sieht so aus

    string substr ( string $string , int $start [, int $length ] )

    daraus machst du

    substr($row['inhalt'], strrpos(substr($row['inhalt'], 0, stripos($row['inhalt'], $a3)), " "), 200)

    Der grüne Teil... die Startposition... macht irgendwie keinen Sinn! Zumindest erkenne ich den nicht.

    Du hast doch einen Startwert - stripos($row['inhalt'], $a3) - das ist doch nur eine Zahl, die du beliebig um 0, 12, 999 oder was auch immer verringern kannst, um die Startposition festzulegen.


    Zum anderen Teil der Frage... ja, das verursachst du selbst, indem du ja beim Ersetzen (einfügen der farblichen Markierung) im Einfügestring den originalen Suchstring verwendest!

    Um das zu ändern, müsstest du beim Erstellen des Ersatzstrings zunächst das Suchwort in der aktuell genutzten (abweichenden) Schreibweise auslesen.

    Code
    1. $true_a3 = substr($row['inhalt'], stripos($row['inhalt'], $a3), strlen($a3));

    (hab ich jetzt nicht getestet, sollte aber passen)

    Und dann $true_a3 nutzen, um den Ersatzstring zusammenzustellen.


  • Um die Sache mal in die richtige Bahn zu lenken:

  • Ups, was mach das Forum denn da aus dem Quellcode?!?!?!?!?


    Gepostet habe ich u.a. diese Zeile:


    $result = preg_replace("/\b($needle)\b/i", "<span style='font-weight: bold; color:#ff0000;'>$1</span>", $haystack);


    aber es kommt das bei raus:


    result = preg_replace("/\b($needle)\b/i", "<b>$1</b>", $haystack);

  • Aber genau das ist der richtige Weg.

    Um dem Wunsch der führenden und folgenden 100 Zeichen nachzukommen, kann man das so erweitern:


    $result = preg_replace("/.{1,100}\b(foobar)\b.{1,100}/i", "<span style='font-weight: bold; color:#ff0000;'>$1</span>", $haystack);

  • Danke erstmal.

    Habe es jetzt zum laufen bekommen. ( OHNE FEHLER ).


    Ich wollte aber auch versuchen das die Beispiele m.scatello und Arne Drews zum laufen zu bekommen und zu verstehen.Das meiste verstehe ich ja ,aber nicht alles.

    Leider bekomme ich es noch nicht zum laufen.

    Da kein Fehler rausgworfen wird ,muß ich den Fehler so suchen.

    Dazu müsste ich wissen was das $1 zu bedeuten hat ,bzw welche Variable da rein soll ?

    Ich habe das schon öffters gesehen beim Googeln und gehe Stark von aus das da irgendwie das Suchwort da hingekommen ist.Aber woher ? Weil $1 wird ja nirgendswo definiert.


    Oh man ich weiß ,keiner versteht mich jetzt wieder was ich meine

  • $1 ist eine Backreference. Die Klammerungen in dem Pattern werden intern durchnummeriert und bilden Resultatgruppen.

    Mit $1 greifst Du lediglich auf die erste Gruppe des Resultat zu, in meinem Fall also das "foobar".

  • $1 ist eine Backreference. Die Klammerungen in dem Pattern werden intern durchnummeriert und bilden Resultatgruppen.

    Mit $1 greifst Du lediglich auf die erste Gruppe des Resultat zu, in meinem Fall also das "foobar".

    Das ist gut.Nur leider bringt mich das der Fehlersuche nicht weiter.

    Weil er Zeigt ein Text an was ca 100 Zeichen lang ist ,aber weit nach den gefundene Wort und markiert ist auch nix.

    Mit den Zahlen spielen bringt auch nix.


    Fragen wir mal anders .Was ist eurer Meinung nah die einfachste Variante?

    Hier wurden jetzt mehrere Varianten und functionen gennant.

    Das replace und so verstehe ich ja .Nur warum er bei einen gefunden Wort nicht 100 zeichen hoch und runter zählt ,verstehe ich nicht ganz.

    Zumindest zählt er nicht so wie die Zahlen es sagen