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:
$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