Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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

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

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

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!

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.

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:

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

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.

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.

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.

Meine Idee finde ich da angenehmer in der Handhabung!:P

Ich glaube aber, ich mache das mit den Tags. Ist nach einfacher und weniger zu denken:schlaf::D

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.