Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    php e parser delle stringhe

    Ciao a tutti,

    devo costruire un piccolo algoritmo che sostanzialmente analizzi un testo HTML e sosituisca determinate parole con un link.

    ora... lo str_replace() è troppo semplice per questo tipo di operazione per il semplice fatto che non posso controllare se la parola è all'interno o meno di un tag.

    Il che vuol dire che mi rimane il preg_replace() ma non essendo troppo ferrato con le espressioni regolari volevo sapere se qualcuno conosce un'esempio pratico da cui partire...

    Questo è un esempio che deve già tenere in considerazione una serie di fattori:

    Stringa HTML:

    Hello mum! title is OK

    La parola da sostituire è "title"

    Logicamente la prima può essere sostituita in quanto si trova tra i tag mentre la seconda no in quanto fa parte del costrutto del tag <a>

    Grazie per qualsiasi suggerimento!

    p.S. Inizialmente mi ero sviluppato un'algoritmo che splittando per tag <>, analizzava le stringhe valide, e ricomponeva tutto... Il problema è che vi lascio immaginare i problemi di prestazione quando si ha un testo HTML particolarmente pieno di tag e soprattutto molto lungo.
    http://www.ophera747.com

  2. #2
    Ciao,
    non so se ho capito bene.
    Se tu vuoi fare la replace delle parole (title) che non fanno parte del codice HTML
    puoi utilizzare la strip_tag().

    Questa elimina tutti i tag e ti restituisce solo il testo.

    ES:

    $html = "Hello mum! title is OK";

    $txt = strip_tag($html);

    $txt ora contiene solo "Hello mum! title is OK".

    A questo punto diventa facile sostituire title con quello che vorresti .......
    sempre che io abbia capito la tua necessità.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  3. #3
    non proprio... in quanto devo comunque mantenere tutti i tag della pagina...

    semplicemente non devo sostituire alcuna parola che sia contenuta all'interno dei caratteri <...> ma solo tra >...<
    http://www.ophera747.com

  4. #4
    trovato un'algoritmo funzionante...

    allego.. mi servisse a qualcun'altro:

    $text = "


    lorem ipsum sit amet pro <a href=\"lorem.html\">lorem ipsum</a> <a href=\"\" title=\"pro lorem sit\">sit</a> amet pro lorem ipsum sit amet pro lorem
    ipsum sit amet pro lorem, ipsum sit amet pro lorem. lorem \"lorem\"</p>";

    $myLink = "miolink.html";

    echo "Text Start: <hr/>\n".$text."\n\n";

    $key ="lorem";
    $key_tmp ="$1~~$2";

    //keyword inside an tag: <tag bla bla keyword bla bla>
    $regex1 = "%(<[^>]*?)$key(.*?>)%";
    $text = preg_replace($regex1,$key_tmp,$text);

    //keyword within an openining and closing tag: <tag>bla bla keyword bla bla</tag>
    $regex2 = "%(>[^<]*?)$key(.*?</[a-o,q,r,t-z])%";
    $text = preg_replace($regex2,$key_tmp,$text);

    $text = str_replace($key, "<a href=\"".$myLink."\" title=\"$key\">$key</a>", $text);
    $text = str_replace("~~", $key, $text);

    echo "Text End: <hr/>\n".$text."\n\n";
    http://www.ophera747.com

  5. #5
    Potresti utilizzare le librerie XMLDOM:
    ma il tuo documento dovrebbe essere XHTML corretto.

    In questo modo, navigando nodo per non puoi cambiar solo il testo senza alterare i tag e poi
    farti restituire l'albero XML così da ottenere la parte html originale con il testo sostituito.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

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.