Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.:D

Mfg,

milkilord

Geschrieben
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.

Geschrieben

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

Geschrieben

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.:D

Geschrieben

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 :-(

Geschrieben

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!

Geschrieben

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

Geschrieben

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.

Geschrieben

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:

Geschrieben

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 ;-)

Geschrieben

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.

Geschrieben
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.

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...