parser: selezionare parola esatta

mano

Nuovo Utente
3 Lug 2008
23
0
0
ciao

ho creato un piccolo parser che mi permette di scansionare un testo, riconoscervi alcune parole chiave, contenute in un database, e rimaneggiarle in modo da renderle dei collegamenti ipertestuali. il tutto funziona bene. Unico problema, se una parola chiave è parte di una parola più grande, questa viene comunque fatta diventare un link.

Esempio:
la mia parola chiave è "control".
se nel testo ho la parola "controllare", che non è evidentemente parola chiave, il parser legge comunque la parola "control" e mi modifica il testo rendendo solo quella parte un collegamento così:
controllare

ora, io vorrei che il parser non modifichi una parola a meno che non sia esattamente quella, e non faccia parte di altre parole più lunghe.

scrivo di seguito la funzione:

PHP:
// Funzione modifica testo
function scan_text($value="",$tab_key)
{
   $keywords = safe_query("SELECT * FROM $tab_key");
   if (mysql_num_rows($keywords)){
      while($key = mysql_fetch_array($keywords)){
        $indirizzo = $key['indirizzo'];
        $key = str_ireplace("_"," ",$key['keyword']);
	
        // NUCLEO DEL PARSER
        $value = eregi_replace($key,"<a href=\"index.php?action=".strtolower($indirizzo)."\">".$key."</a>",$value);
      }
   }
   return $value;
}
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Non ho capito una cosa: se $value è la stringa in cui effettuare la sostituzione e $tab_key è quello relativo alla tabella, come passi la variabile da cercare?
 

mano

Nuovo Utente
3 Lug 2008
23
0
0
la variabile da cercare è registrata nella tabella $tab_key costituita da 3 colonne: ID, KEYWORD e INDIRIZZO, dove keyword è la parola chiave da cercare all'interno della stringa $value.
dopo il fetch array di $keywords, estrapolo l'indirizzo ($indirizzo) e la parola chiave, che rinomino $key dopo averla modificata con la riga qui sotto, in modo da sostituire gli underscore con spazi: questo perchè nel database la parola chiave composta da più tesrmini è registrata come parola1_parola2, mentre nel testo si troverà senza trattino.

PHP:
$key = str_ireplace("_"," ",$key['keyword']);

in effetti così com'è scritta la funzione, pecca un po' di scarsa leggibilità, ma ti assicuro che il passaggio della parola è corretto. Il problema era isolare la parola all'interno della stringa.

comunque sono in qualche modo a risolvere il problema utilizzando al posto di
PHP:
$value = eregi_replace($key,"<a href=\"index.php?action=".strtolower($indirizzo)."\">".$key."</a>",$value);
questa riga di codice:
PHP:
$value = preg_replace("/\b$key\b/i","<a href=\"index.php?action=".strtolower($indirizzo)."\">".$key."</a>",$value);

in questo modo sembra funzionare correttamente, evidenziando per esempio "control" anzichè "controller".
sostanzialmente dovevo utilizzare il modifier "\b" con la funzione preg_replace. Mi sembra che eregi_replace non supporti i modificatori. o sono io che sbaglio qualcosa?
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
C Parser di una risposta soap XML 0
A Come mettere il target _blank in un parser xml in php? PHP 1
JackIlPazzo Assegnare un id ad elementi con parser PHP 2
P Parser XML-PHP PHP 0
R Parser/Editor XACML PHP 0
M piccolo parser per creare links PHP 1
A Parser HTML Javascript 6
S Selezionare ultimo record di una sotto query MySQL 26
M Come selezionare e deselezionare radiobutton con jquery jQuery 1
Y Vorrei selezionare un colore di sfondo per una pagina web Javascript 0
S Upload file senza doverlo selezionare PHP 2
S Selezionare e deselezionare checkbox Javascript 0
M [PHP] Selezionare immagini directory non presenti in db PHP 11
S [PHP] selezionare colonna tabella utilizzando un array PHP 1
S [PHP] Selezionare i campi non in comune con le altre colonne della tabella PHP 4
L [PHP] CHECKBOX DA SELEZIONARE IN UNA TABELLA PHP 4
S [PHP] selezionare colonne in comune con un altra tabella PHP 5
T selezionare terza colonna della relatica row Database 2
G [Javascript] Selezionare una checkbox in maniera condizionata Javascript 5
G [PHP] Selezionare OGGI anno precedente per query sql PHP 2
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
otto9due Selezionare singoli giorni su datepiker jQuery 1
S [PHP] Selezionare dati in intervallo di tempo PHP 21
gandalf1959 Selezionare un intervallo tra due date, php e mysql PHP 2
M [PHP] selezionare dati da db e fare confronti PHP 0
L [PHP] selezionare righe di una tabella con le checkbox e cancellarle PHP 2
R [Photoshop] Selezionare elemento in immagine ed esportarlo Photoshop 3
S [PHP] Selezionare ultimo campo ed escludere doppioni PHP 16
S [PHP] Selezionare tutte le colonne meno due PHP 6
asevenx Selezionare elementi da un elenco in modo dinamico e inviarli al database PHP 0
C selezionare distinti id e sommare uguali PHP 1
asevenx Realizzare modulo per selezionare elementi da una lista PHP 1
M Selezionare un risultato ogni 10 da select MySQL 4
L [php e mysql] selezionare sia i selezionati e i non selezionati PHP 1
M Selezionare un record da una tabella continua MS Access 0
H Selezionare la versione di Access Runtime in base all' applicazione MS Access 0
H Selezionare la versione di Access Runtime in base all' applicazione MS Access 0
F Selezionare voce di menu attiva HTML e CSS 1
asevenx selezionare prossima data da database PHP 2
T selezionare un campo da un db con radio button PHP 0
M Tabella PHP con sorgente dati csv: selezionare le riche e compilare Form eMail PHP 1
P Impossibile selezionare il database PHP 7
P impossibile selezionare il database PHP 0
felino Selezionare le colonne con una certa condizione PHP 2
S Selezionare files con drag and drop prima di upload PHP 0
F selezionare puntatore google engine Javascript 0
L Selezionare query da menu a tendina MS Access 2
M Selezionare quantità spostando una "barra" Javascript 5
M Selezionare dati tra due tabelle Database 3
M Selezionare dati tra due tabelle PHP 1

Discussioni simili