Scusa se rispondo dopo un po' di tempo ma mi ero scordato di provare la tua soluzione. ora l'ho provata ma anche aggiungendo la i viene modificato il testo originale con quello cercato (come eregi_replace)
Scusa se rispondo dopo un po' di tempo ma mi ero scordato di provare la tua soluzione. ora l'ho provata ma anche aggiungendo la i viene modificato il testo originale con quello cercato (come eregi_replace)
La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!
Forse non ho capito di preciso cosa ti serve, ma puoi provare così.
In questo modo, scrivi la chiave di ricerca in minuscolo e dovresti evitare i problemi che ti si sono creati.Codice PHP:$val = strtolower($val);
$risultato = eregi_replace ( $val , "[b]$val[/b]" , $query);
![]()
Il mio problema è che non riesco ad evidenziare le parole che vengono cercate nel mio script di ricerca senza modificare la vista del testo originale
questa è la frase originale scritta da me
Mauro mangia la mela
Un utente cerca MeLa (scritto cosi per far capire in maniera migliore quello che no voglio che avvenga) e tramite eregi_replace viene sostituito mela (parola scritta in maniera corretta) con MeLa (la parola cercata dall'utente) e questo è il risultato
Mauro mangia la MeLa
Quello che vorrei ottenere è che in qualsiasi modo l'utente scriva la parola essa venga evidenziata ma in maniera corretta. Riprendendo l'esempio di sopra il risultato che vorrei mostrare all'utente che cerca MeLa è:
Mauro mangia la mela
La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!
Il problema si è risolto solo in parte, in quanto se per esempio cerco MeLa e la parola ricercata nel testo è minuscola, avviene la corretta sostituzione e quindi ottengo quello che voglio. Il problema ora è se la parola ha la prima lettera maiuscola o se nella parola ci sono lettere maiuscole allora vengono sostituite con le lettere minuscole.
Quello che vorrei ottenere come risultato è lo stesso dei motori di ricerca vedasi Google, Yahoo e chi più ne ha più ne metta ovvero che vengano mantenute le parole scritte correttamente e che venga aggiunto un tag prima e dopo la parola
La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!
Non so se è il caldo o l'aterosclerosi, ma rileggendo bene il tuo ultimo post capisco di non avere capito ancora quello che ti serve.
![]()
Se devi aggiungere solo dei simboli (che siano tag o meno) ad una stringa, allora ti basta usare str_replace()..... senza stare a modificare nulla!!!
Ma possibile che la soluzione al tuo problema sia così semplice??? Ho capito male anche stavolta????Codice PHP:$val = $_POST['val']; // la chiave di ricerca
$risultato = "xxxxx"; // il testo in cui cercare la chiave
$risultato = str_replace ($val , "[b]$val[/b]" , $risultato);
![]()
No non funziona.
Provo nuovamente a spiegare il mio problema.
Provate a cercare la seguente parola in google: GooGLE
vedrete che google vi ritorna tutti i risultati riguardanti la parola cercata e se ne frega di come noi l'abbiamo scritta (con 4 lettere maiuscole) lui evidenzia sia quelle scritte con le lettere minuscole (per esempio www.google.com) sia quelle con lettere maiuscole (Il sito di Google). Bene questo è quello che vorrei ottenere.
Invece a me capita questo.
Se io utilizzo eregi_replace e cerco GooGLE nel mio motore di ricerca, mi vengono evidenziate tutte le parole uguali ma anche sostituite con quanto cercato, per esempio mi sarebbe tornato www.GooGLE.com oppure Il sito di GooGLE. Praticamente il pregio di eregi_replace è che non è case sensitive quindi sia che google sia scritto in maiuscolo o meno lui individua la parola e la evidenzia, solo che per evidenziarla io gli dico di sostituirla con la parola cercata, ma cosi viene sostituita. Non c'è un modo per lasciare integra la parola originale (quella presente nel database) e non farla sostituire a quella cercata?
Io vorrei una roba simile
$val = GooGLE // L'utente cerca la parola GooGLE
$testoDoveVieneCercata = "Il sito di Google"
$mostroLaParolaEvidenziata = "Il sito di Google"
il fatto è che non so come ottenere questo risultato.
Si è capito meglio cosi?
La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!
OK, ora va meglio e per risolvere.... basta che tu preveda delle opzioni.
La chiave di ricerca la puoi evidenziare così com'è, oppure fare delle proposte, tipo scriverla tutta in minuscolo.
Butto giù un po' di codice così capisci meglio.
Sostanzialmente, un utente può scrivere la parola come meglio crede, e te gliela vai a cercare.Codice PHP:$val = $_POST['val']; // la chiave di ricerca come scritta dall'utente
$risultato = "xxxxx"; // il testo in cui cercare la chiave
$val1 = strtoupper($val);
$val2 = strtolower($val);
$risultato = str_replace ($val , "[b]$val[/b]" , $risultato);
$risultato = str_replace ($val1 , "[b]$val1[/b]" , $risultato);
$risultato = str_replace ($val2, "[b]$val2[/b]" , $risultato);
Ma puoi anche suggerirgli la stessa parola, magari scritta tutta in maiuscolo oppure tutta in minuscolo.
Fatto sta, che per creare un vero e proprio motore di ricerca intelligentre, si preferisce usare il MATCH/AGAINST di MySQL, che permette di avere anche la percentuale di corrispondenza tra la chiave cercata ed il testo in cui la ricerca viene effettuata.
Diciamo che il metodo che ti ho appena segnato è piuttosto artigianale, ma almeno dovrebbe funzionare.
Un piccolo appunto.
eregi_replace() come lo usi te è inutile.
Questa funzione è meglio utilizzarla quando il pattern di ricerca è una espressione regolare.... per manipolare una stringa in maniera semplice è meglio utilizzare str_replace().
Fai riferimento al manuale ufficiale per maggiori dettagli.
![]()
prova con str_ireplace