Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292

    filtrare str_ireplace espressione regolare

    Ciao a tutti, ho scritto una specie di motore di ricerca (php,mysql), al momento come risultato mi viene dato il testo che contiene la parola ricercata con la parola evidenziata.
    Tutto perfetto, però sorge un problema. Il testo in database contiene anche codice html.

    esempio: parola di ricerca è arkus

    il testo contiene: <a href="malto:arkus@html.it">arkus<a>

    eseguita la query ottengo il testo scritto sopra, per evidenziare la parola io utilizzo
    $testo = str_ireplace($parole[$i],"<span style=\"color: black; background-color: yellow\">$parole[$i]</span>",$testo);
    il problema è che questa istruzione mi da questo risultato:
    <a href="malto:<span style="color: black; background-color: yellow">arkus</span>@html.it"><span style="color: black; background-color: yellow">arkus<a>
    quindi inseriscee il tag span anche all'interno della href.

    Ho pensato di utilizzare la preg_replace per far in modo che vengano ignorate le parole comprese tra i caratteri < > ,quindi tutto ciò che è entro i delimitatori di un tag e che non sia case sensitive.

    $testo = preg_replace($parole[$i] non comprese tra i delimitatori < >,"<span style=\"color: black; background-color: yellow\">$parole[$i]</span>",$testo);

    Può essere valida come idea? Se si che tipo di espressione regolare dovrei utilizzare?
    Grazie

  2. #2
    Teoricamente, forse è meglio pensare "la negazione di tutte le parole tra tag"

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Grazie Smaleo per la risposta, ma potresti essere un pò più chiaro? sono un pò confuso su questa cosa

  4. #4
    Mi disp, ma posso dirti solo la teoria, per la pratica con le regex ho poca dimestichezza

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    grazie lo stesso Samleo...resterò in attesa di un'altra eventuale risposta.

  6. #6
    Non è semplice impostare una regexp per questo caso, in quanto mi sembra di capire che non è detto che ci sia sempre lo stesso codice HTML nel testo.
    Mi viene allora in mente che potresti usare, quantomeno strip_tags().

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Buon dì Alcio
    avevo pensato alla strip_tag() ma poi perderei la formattazione del testo.
    Avevo anche pensato di memorizzare le varie posizioni dei tag, eliminarli con la strip, fare la replace e quindi reinserire i tag nelle posizioni memorizzate, però mi sembra tutto troppo macchinoso soprattutto se la ricerca dovesse dare molti risultati.

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Ho provato questa soluzione vedi se ti puo' andare...
    Codice PHP:
    <?php
    $link
    ='[url="malto:arkus@html.it"]arkus[/url]';

    if(
    preg_match("#>[a-z]+<#",$link,$match))
    {

    echo 
    str_replace($match[0],"><span style=\"color: black; background-color: yellow\">yellow</span><",$link);
    }
    ?>

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao seven, ho fatto un esempio semplice del tipo di testo che potrebbe tornarmi come risultato della ricerca ma di norma il testo è complesso a livello di frmattazione e tag.
    Ho provato a capire come utilizzare la soluzione da te proposta ma non ne sono venuto a capo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.