milkilord Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Hallo, ich programmiere im Moment eine Suche incl. Auto-/Livesuche mittels Ajax. Die PHP-Datei zum Suchen liest eine Reihe Textdateien ein und gibt jetzt speziell für die Livesuche Vorschläge aus, die den bisher eingegebenen String enthalten. Bei den Textdateien handelt es sich um News. Nun zu meinem Problem:confused:: Das Skript funktioniert so weit, nur dass es, wenn im Text z.B. steht: "word)nocheinpaarBuchstaben", wird "word)nocheinpaarBuchstaben" ausgegeben, da ich bissher die Wörter trenne, indem ich per explode(" ", $text); die einzelnen Wörter trenne. Ich bräuchte eine Lösung, die Wörter richtig zu trennen! Ich bedanke mich schonmal für die hoffentlich zahlreichen Infos. Mfg, milkilord Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Ich wüsste jetzt nicht das es da eine Möglichkeit gibt. Weil man ja meistens eine Bedingung zum Trennen braucht also z.B. "Trenne nach dem 5. Buchstaben"... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Ich wüsste jetzt nicht das es da eine Möglichkeit gibt. Weil man ja meistens eine Bedingung zum Trennen braucht also z.B. "Trenne nach dem 5. Buchstaben"... also bei explode() (siehe function.explode) braucht man man nur explode($trenner, $string [, $limit (maximale Anzahl der Trennungen)]).explode() gibt einen Array zurück. Beispiel: print_r(explode("|", "foo|bar|abc"); /* returns: */ Array(3) { 0 => 'foo', 1 => 'bar', 2 => 'abc' } [/PHP] Mein Problem ist nur, dass wenn ein Wort z.B. fooBar ist, ich aber nur foo bekommen möchte, nicht nach Leerzeichen ternnen kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Ja aber PHP weiß dann doch immer noch nicht ab wann es die Trennung durchführen soll ;-) Oder stehe ich gerade total auf dem Schlauch :-D Weil wenn du ein Wort trennen Willst z.B. fooBar dann braucht es doch eine Anweisung das die Trennung z.B. ab B getrennt wird Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Also ich glaube, wir reden gerade aneinander vorbei! Vlt. war fooBar auch ein schlechtes Beispiel. Hier ein neuer Versuch: $string = "dies ist ein String in dem ein Wort gesucht werden soll(test)"Diesen String würde ich jetzt mittels $string = "dies ist ein String in dem ein Wort gesucht werden soll(test)" $woerter = explode(" "/*Leerzeichen*/, $string); print_r($woerter); /* Ausgabe: Array(11) { 0 => 'dies', 1 => 'ist', 2 => 'ein', 3 => 'String', 4 => in'', 5 => 'dem', 6 => 'ein', 7 => 'Wort', 8 => 'gesucht', 9 => 'werden', 10 => 'soll(test)' } */ [/PHP] Suche ich jetzt nach z.B. 'Wort' oder 'gesu', findet mein Skript es richtig. Suche ich aber nach 'soll', gibt er mit 'soll(test)' zurück. Und genau das will ich verhindern. Er soll mir nur 'soll' zurückgeben! Ich hoffe es ist jetzt klarer geworden, was ich meine. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Ah okay dann hatte ich es wirklich falsch verstanden ;-) Schonmal mit trim(String[, Zeichenliste]) versucht? Dann entfernt es zumindest die von dir angegebenen Sonderzeichen, was anderes würde mir jetzt auch nicht einfallen :-( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Danke, trim($string[, $zeichenliste]) ist fast perfekt, ich denke nur, dass, wenn ich die Klammer auf bzw. zu entferne, dass ich dann aus "soll(test)" "solltest" mache, oder?:confused: Aber der Ansatz ist gut! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Dann wäre doch für die die einfachste Möglichkeit einfach die vorhandenen Sonderzeichen in deinem Text durch einfache Leerzeichen zu ersetzen und danach den Text erst zu trennen. Ich bin zwar in PHP jetzt nicht so bewandert, aber die Funktion str_replace sieht dafür doch passend aus: PHP: str_replace - Manual Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Danke, daran hatte ich auch schon gedacht, nur was mache ich, wenn nach den Sonderzeichen gesucht werden soll. Eine andere Idee wäre, einfach beim Erstellen neuer News, "Tags" zu den News hinzuzufügen. Problem, ich muss für alle alten News Tags finden, oder sie von der Livesuche ausschließen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Vielleicht könnte man versuchen eine entsprechende Funktion zu basteln. Wo quasi zuerst nach Sonderzeichen gesucht wird und dann ab dem Sonderzeichen bis zum nächsten Leerzeichen der Inhalt gelöscht wird. Aber wie man das nun genau macht, kann ich so auf die schnelle auch nicht sagen :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Vielleicht könnte man es damit versuchen: //Variable für Sonderzeichen definieren $sonderzeichen = "(" //Im String nach dem Sonderzeichen suchen, in der Variable wird ab_sonderzeichen wird dann der String ab dem Sonderzeichen gespeichert $ab_sonderzeichen = strstr($string, $sonderzeichen); //Man ersetzt die Leerzeichen durch ; und setzt das Limit auf 1 der String nach dem 1. ; wird in einer Variable gespeichert $textende = explode(";", $ab_sonderzeichen, 1); Jetzt müsste man nur noch die ; durch Leerzeichen ersetzen und den String vor dem ( mit $textende zusammenfügen. Also ich weiß nicht ob es klappt aber evtl. könnte es klappen ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Ein Lösungsvorschlag wäre: function specialchars($text) { $search = array ("'", "(", ")", "*", "+", ",", "-", ".", ":", "?", "!", "@", "[", "\\", "]", "‘", "’", "‚", "“", "â€", "„", "„", "“"); $search = " "; for($i = 0; $i <= count($search); $i++) { $text= str_replace($search[$i], $replace, $text); } return $text; } [/PHP] Dann halt zuerst die Sonderzeichen entfernen und danach die Leerzeichen entfernen. Ein anderer Lösungsvorschlag wäre frei nach PHP Example AJAX Live Search einfach den News beim Erstellen "Tags" zu geben und diese in einer zentralen XML-Datei zu speichern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Vielleicht könnte man es damit versuchen: //Man ersetzt die Leerzeichen durch ; und setzt das Limit auf 1 der String nach dem 1. ; wird in einer Variable gespeichert $textende = explode(";", $ab_sonderzeichen, 1); Mit explode()(PHP: explode - Manual) kannst du keine Zeichen ersetzten, sondern strings zwischen dem zu suchenden Zeichen suchen, den kompleten String an diesen Zeichen aufteilen, und diese Einzelstrings in einen Array schreiben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Ja aber wenn du doch ein Limit setzt wird der Rest in einem gespeichert und das kannst du dann doch mit dem normalen String zusammenführen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
milkilord Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Meine Idee finde ich da angenehmer in der Handhabung! Ich glaube aber, ich mache das mit den Tags. Ist nach einfacher und weniger zu denken:schlaf: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.