Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    129

    Modificare tutti i link che appaiono in un string

    Salve a tutti,

    sto lavorando su un codice da giorni e non riesco a trovare la soluzione.
    Nella mia base dati ho salvato vari testi e voglio ottenere le seguenti cose:

    - Tutti i link che iniziano per http:// devono essere cambiati per un'altro codice
    - I link che non iniziano per http:// o www devono rimanere uguali

    Ho avanzato parte del codice peró manca molto:

    String di esempio:
    codice:
    <p><a href="http://php.net/manual/fr/function.count.php" target="_blank" class="livepreview"></a><a href="http://www.prova.com" target="_blank" class="livepreview">www.prova.com</a>&nbsp;<a href="http://php.net/manual/fr/function.count.php" target="_blank" class="livepreview">http://php.net/manual/fr/function.count.php</a>&nbsp;</p>
    codice:
      $textoentr=$rowtexto['texto'];
    
      $hrefs = array();
      $dom = new DOMDocument();
      $dom->loadHTML($textoentr);
      $tags = $dom->getElementsByTagName('a');
      foreach ($tags as $tag) {
      $hrefs[] =  $tag->getAttribute('href');
      }
    
      $retnuml=substr_count($textoentr, "href");
      $retnuml=$retnuml-1;
    
      $textofinapp = strip_tags($textoentr,'<p><strong><em><br/><br><span><img>');
      for ($i = 0; $i <= $retnuml; $i++) {
      $linkapp = '<a onClick="parent.postMessage(' . "'$hrefs[$i]'" . ', ' . "'*'" . '); " style="color:#f69100;">'.$hrefs[$i].'</a>';
         $textofinapp = str_replace($hrefs[$i],$linkapp, $textofinapp);
      }
    Spiego il codice...

    - Prima di tutto estraggo la stringa dalla base di dati:
    codice:
    $textoentr=$rowtexto['texto'];
    - Dopo mi creo un array() con tutti i link che ci sono in string, e saranno almacenati nei vari $hrefs[0], $hrefs[1], $hrefs[2], etc...

    - Poi conto con "substr_count" cuanti href ho in string, che mi serve per ripetere un ciclo for.

    - Elimino tutti i tag <a> dalla catena di testo

    - Chiamo il ciclo for e sostituisco nel testo ogni coincidenza dell'array con il nuovo link completo ($linkapp)


    Ho 2 problema adesso:
    - Non voglio che il cambio si applichi in link che non iniziano con http:// o www. Cioè i link interni della web.
    - con la funzione
    codice:
    $textofinapp = str_replace($hrefs[$i],$linkapp, $textofinapp);
    non si selezionano le parole che iniziano per www, solo riconosce le parole che iniziano con http://.

    Come posso risolvere???
    Grazie

  2. #2
    Premessa: quale è lo scopo concreto che stai perseguendo? Ti pongo questa domanda perchè probabilmente stai seguendo un approccio errato.

    Detto ciò... stai usando funzioni e logiche non idonee. Per quel che vuoi fare devi usare la funzione preg_replace a cui applicare l'opportuna regex.
    Su quest'ultimo aspetto non sono in grado di aiutarti.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    129
    Ciao oly,
    SI effetivamente usando preg_replace ho risolto... e con la giusta funzione logica...
    Stavo usando str_replace pero preg è idóneo.

    Grazie

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.