aggiungere collegamento ai link

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
Come posso creare una funzione che mi permetta di trasformare tutte le parole che iniziano con http:// nel relativo collegamento html <a href="http://resto-della-parola">http://resto-della-parola</a> ?
 
prova così:
PHP:
$link = preg_replace("/(http:\/\/[^\s]+)/", "<a href=\"$1\">$1</a>", $testo);
 
Funziona, però adesso è sorto un'altro problema: per inserire dei collegamenti o cose similo ho creato un sistema di bbcode, però adesso vengono convertiti anche gli url dei bbcode.
Codice:
[url=http://sito.com]
diventa
Codice:
[url=<a href="http://sito.com">http://sito.com</a>]

c'è un modo per risolvere?
 
Invece di usare i tuoi BBCode personalizzati non sarebbe meglio adottare uno standard di formattazione del testo e usare Markdown? È facile da scrivere e anche quando non è formattato si capisce perfettamente quale sarà il risultato nel testo finale.

Qui puoi trovare la documentazione della sintassi: http://daringfireball.net/projects/markdown/.
Qui invece il port per PHP: http://michelf.com/projects/php-markdown/.
 
Ho utilizzato i bbcode perchè ho bisogno di assegnare ad alcuni elementi classi specifiche del css, ad esempio
Codice:
 lo converto in <div class="code">. Sul database memorizzo il bbcode così in caso abbia bisogno di cambiare la classe del codice (o altri elementi) mi basterebbe modificare l'espressione in fase di estrazione dei dati.
Ho dato un'occhiata a quello ma non ho capito se potrei utilizzarlo per far ciò.

Adesso mi sono letto [URL="https://www.mrw.it/php/articoli/espressioni-regolari-funzioni-pcre-e-differenze-funzioni-posix_1262_3.html"]questo[/URL] articolo e sono quasi riuscito a risolvere. Ho provato con questo ma non riesco a capire come mai mi rimangano i simboli di apertura e chiusura del tag:
[PHP]$testo = preg_replace("<a href=\"<a href=\"(.*?)\">(.*?)</a>\">", "<a href=\"$1\">", $testo);[/PHP]
In pratica al posto di diventare <a href="link"> diventa <<a href="link">>
Come mai?
 
Non funziona ma sono riuscito a risolvere: ho aggiunto i delimitatori e fatto l'escape dello slash di chiusura del tag a.
PHP:
$testo = preg_replace('/<a href="<a href="(.*?)">(.*?)<\/a>">/', "<a href=\"$1\">", $testo);

Però non ho capito quale fosse l'errore, può essere che i segni < e > vengano considerati i delimitatori di inizio e fine dell'espressione?
 
Effettivamente mancavano i delimitatori. Comunque, se vuoi evitare di fare l'escape dello slash di chiusura, puoi usare un altro carattere per delimitare l'espressione. Io solitamente ne uso uno che non compare nell'espressione, per evitare di mettere backslash inutili. Prova ad esempio con la chiocciola.
 
Ma c'è una lista con "tutti" questi delimitatori oppure si può usare qualunque carattere?
 

Discussioni simili