Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777

    str replace e parole composte

    salve a tutti,
    questo è il codice
    Codice PHP:
    <?
        $cerca 
    = array("ammasso","evoluzione","selezione","alieno","carbonio","universo","UFO","galassia","anno luce");

        
    $sostituisci = array();
        for (
    $parole=0$parole<= (count($cerca)-1); $parole++){
        
    $sostituisci[$parole]= "<a class=\"glossario\" href=\"http://www.atuttascienza.altervista.org/glossario.php#$cerca[$parole]\" target=\"_blank\">$cerca[$parole]</a>";
        
        }
        
        do{
        
    $stato++;
        if (
    $stato==1){
        echo 
    "<h2>$titoli[1]</h2>";
        }
        else{
        echo 
    "<h3>$titoli[$stato]</h3>";

        echo 
    str_ireplace($cerca$sostituisci$testo[$stato]);
            
        }
        }
        while(
    $stato==(count($titoli)));
        
        
    ?>
    allora str_replace ha l'effetto di trasformare le parole dell'array in parole linkate verso un glossario....
    il problema sorge con le parole composte
    ad esempio:
    ammasso e superammasso me le fa cosi
    ammasso è tutto linkato
    mentre superammasso e fatto cosi
    super non linkato e ammasso linkato...in pratica nella parola riconosce ammasso e lo linka ma non superammasso..

    come si può risolvere?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    nessuno mi sa rispondere

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Penso tu debba usare delle espressioni regolari, con str_replace non puoi fare ciò che chiedi.
    str_replace prende solo la stringa esatta che gli passi come chiave, non l'intera stringa di cui fa parte.

    Con una regex potresti fare così (prendi con le molle il codice, lo scrivo al volo senza testarlo)
    Codice PHP:
    $pattern '/([A-Za-z]+)?parole([A-Za-z]+)?/';
    $stringa "Prova per trovare parolecomposte parole semplici, superparole e superparolecomposte";

    preg_match_all($pattern,$stringa,$risultato,PREG_SET_ORDER);

    foreach(
    $risultato as $value)
        echo 
    $value[0]."
    "

    Se non ho fatto errori dovrebbe stamparti:
    parolecomposte
    parole
    superparole
    superparolecomposte

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    ok funziona ora però devo adattarlo ad un testo....
    cioè mi deve scrivere tutto il testo con le parole che voglio linkate...

    stavo pensando di adattare lo script facendo un array delle parole da linkare....secondo voi va bene?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    Codice PHP:
    $pattern '/([A-Za-z]+)?ammasso([A-Za-z]+)?/';

    $stringa "Prova per trovare ammasso evoluzione superammasso ammasso semplici, superparole e superparolecomposte";

    preg_match_all($pattern,$stringa,$risultato,PREG_SET_ORDER);


    foreach(
    $risultato as $value){
     
       
        echo 
    str_ireplace($value[0], "[b]$value[0][/b]"$stringa);
    break;

    ho scritto questo...funziona con ammasso
    ora voglio che la ricerca per un array di termini
    $cerca= array(eccecc)
    in modo che mi stampi il testo con tutte le parole dell'array in grassetto(il formato link lo metto dopo perchè ora non mi andava)

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.