Codice URL da errore che non c'è

Uso già questo codice per validare url preg_match e funziona bene ma se lo metto in un preg_replace non mi riconosce alcuni caratteri e da errore:

$messaggio = preg_replace("/^((http(s)?:\/\/)|(www\.))([a-z0-9][-.a-z0-9]+)((\.[a-z]{2,4})[?\/]?)([?\/][-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9\/]*)?$/",'<a href="\0\">\0</a>',$messaggio);
inviato 7 anni fa
php
php
6
X 0 X

Ciao, ho provato ad utilizzare l'espresisone regolare ed a parte una piccola imprecisione funziona in maniera corretta, ho fatto diverse prove ed è ok.

L'ho controllata ed ho solamente levato un "\" in questo punto:

<a href="\0">\0</a>

A parte questo non ho riscontrato alcun errore e la stringa url viene sostituita correttamente.

Che tipo di errore ricevi?

risposto 7 anni fa
guidoch
modificato 7 anni fa
X 0 X

Ciao, ho provato ad utilizzare l'espresisone regolare ed a parte una piccola imprecisione funziona in maniera corretta, ho fatto diverse prove ed è ok.

L'ho controllata ed ho solamente levato un "\" in questo punto:

<a href="\0">\0</a>

A parte questo non ho riscontrato alcun errore e la stringa url viene sostituita correttamente.

Che tipo di errore ricevi?

Ho tolto la barra  e non da errore però a video l'url non si linka.

Ho messo questo codice già fatto e a video l'url è linkabile ma vorrei usare quello che ho fatto io

$messaggio = preg_replace('/((http(s)?:\/\/)|(www\.))((\w|\.)+)(\/)?(\S+)?/i','<a href="\0\">\0</a>',$messaggio);
risposto 7 anni fa
php
php
6
X 0 X

Ho utilizzato il tuo codice così e non riscontro problemi.

$messaggio = "http://www.indirizzodelsito.it/";

echo "Senza link: ".$messaggio."<br />\n";

$messaggio = preg_replace("/^((http(s)?:\/\/)|(www\.))([a-z0-9][-.a-z0-9]+)((\.[a-z]{2,4})[?\/]?)([?\/][-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9\/]*)?$/",'<a href="\0">\0</a>',$messaggio);

echo "Con link: ".$messaggio."<br />\n";
risposto 7 anni fa
guidoch
X 0 X

Ho utilizzato il tuo codice così e non riscontro problemi.

$messaggio = "http://www.indirizzodelsito.it/";

echo "Senza link: ".$messaggio."<br />\n";

$messaggio = preg_replace("/^((http(s)?:\/\/)|(www\.))([a-z0-9][-.a-z0-9]+)((\.[a-z]{2,4})[?\/]?)([?\/][-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9\/]*)?$/",'<a href="\0">\0</a>',$messaggio);

echo "Con link: ".$messaggio."<br />\n";

C'è questa parte che non capisco:

$messaggio = "http://www.indirizzodelsito.it/";

l'url è sconosciuto lo inserisce l'utente perciò non è prestabilito

risposto 7 anni fa
php
php
6
X 0 X

be, io ho simulato un controllo su un indirizzo inserito, in pratica la stringa $messaggio potrebbe ipoteticamente arrivare da un inserimento manuale lato utente e potrebbe contenere un url corretto oppure qualsiasi altra cosa, ma solo nel primo caso l'espressione regolare andrebbe a sostituitre la semplice stringa con il codice html per comporre il link.

Suppongo che la volontà del tuo script sia questa... oppure mi sono perso qualcosa?  ???

risposto 7 anni fa
guidoch
X 0 X

be, io ho simulato un controllo su un indirizzo inserito, in pratica la stringa $messaggio potrebbe ipoteticamente arrivare da un inserimento manuale lato utente e potrebbe contenere un url corretto oppure qualsiasi altra cosa, ma solo nel primo caso l'espressione regolare andrebbe a sostituitre la semplice stringa con il codice html per comporre il link.

Suppongo che la volontà del tuo script sia questa... oppure mi sono perso qualcosa?  ???

Sto facendo altri controlli mi sempre errore sui caratteri speciali es:

Parse error: syntax error, unexpected '^' in /membri2/photoman/guestbook/view.php on line 138

risposto 7 anni fa
php
php
6
X 0 X

Sai che non riesco a ricreare nessun errore, però è anche vero che se gli passo un testo con all'interno un indirizzo url questo non viene sostituito e suppongo che non vada bene...  :P

Stavo provando a modificare il tuo codice ma poi mi sono ricordato che tempo fa avevo fatto uso di una reg exp come la tua e funzionava bene, la sto cercando ... se vuoi, appena la trovo la pubblico, magari ti può essere utile...  ;)

risposto 7 anni fa
guidoch
X 0 X

Sai che non riesco a ricreare nessun errore, però è anche vero che se gli passo un testo con all'interno un indirizzo url questo non viene sostituito e suppongo che non vada bene...  :P

Stavo provando a modificare il tuo codice ma poi mi sono ricordato che tempo fa avevo fatto uso di una reg exp come la tua e funzionava bene, la sto cercando ... se vuoi, appena la trovo la pubblico, magari ti può essere utile...  ;)

Il mistero è che la reg funziona e non da errore se deve validare il campo _URL del form ma se la metto nel textarea non va

risposto 7 anni fa
php
php
6
X 0 X

Infatti! È quello che ti ho scritto io prima, non trova corrispondenza in una stringa con più parole.

Ho trovato la reg exp di cui ti parlavo prima, se vuoi la pubblico.

risposto 7 anni fa
guidoch
X 0 X

Infatti! È quello che ti ho scritto io prima, non trova corrispondenza in una stringa con più parole.

Ho trovato la reg exp di cui ti parlavo prima, se vuoi la pubblico.

Pubblicala, però vedo che in questo forum funziona e in più il link è anche formattato

risposto 7 anni fa
php
php
6
X 0 X

Ecco qui:

$messaggio = preg_replace('/\\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i', '<a href="\\0">\\0</a>', $messaggio);
risposto 7 anni fa
guidoch
X 0 X

Ecco qui:

$messaggio = preg_replace('/\\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i', '<a href="\\0">\\0</a>', $messaggio);

L'ho provata, non da errore ma non si linka :wallbash:

Cos'è quel b all'inizio?

risposto 7 anni fa
php
php
6
modificato 7 anni fa
X 0 X

Ti serve per fare il match delle sole parole, mi spiego se l'utente inserisce http://... ma per un errore lo precede da un numero senza mettere lo spazio, l'espressione regolare intercetta lo stesso l'inizio dell'url.

Quindi una situazione così funzionerebbe ugualmente: 25http://www.... etc... , subito dopo il numero 25 verrebbe aperto il tag <a>.

Comunque non so che dirti, io questa l'ho usata parecchio e non ho mai avuto problemi....  ???

risposto 7 anni fa
guidoch
X 0 X

Ecco qui:

$messaggio = preg_replace('/\\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i', '<a href="\\0">\\0</a>', $messaggio);

L'ho provata, non da errore ma non si linka :wallbash:

Cos'è quel b all'inizio?

Però ho notato che la mia nell'editor (e il mio non sbaglia) diventa verde-corsivo tipo commento dal cancelletto in poi, la tua no  :lamo:

$messaggio = preg_replace('/^((http(s)?:\/\/)|(www\.))([a-z0-9][-.a-z0-9]+)((\.[a-z]{2,4})[?\/]?)([?\/][-_~;:.,'*^+()=!|?£§$%&#A-Za-z0-9\/]*)?/i','<a href="\\0"target=\"_blank\">\\0</a>',$messaggio);

risposto 7 anni fa
php
php
6
X 0 X

Ho notato una pecca nel tuo: se scrivo wwwwww:sito.it a video mette wwwhttp://www.sito.it invece il mio da giustamente errore

risposto 7 anni fa
php
php
6
X 0 X

Cntrolla la stringa dell'espressione regolare, c'è un singolo apice in questa sequenza e crea l'errore:

(...) [?\/]?)([?\/][-_~;:.,' (...). prova a racchiudere l'espresisone regolare dentro i doppi apici (")

Per prima mi sono reso conto che ti ho detto il contrario, se non metti \\b viene fatto il match anche se c'è un numero attaccato a http://... se lo metti, invece, nel caso di 123http://... non viene fatto il match. Sorry!

risposto 7 anni fa
guidoch
X 0 X
Ho notato una pecca nel tuo: se scrivo wwwwww:sito.it a video mette wwwhttp://www.sito.it invece il mio da giustamente errore

mmmm... ho provato ora come hai detto tu ma giustamente non mi fa il replace, mi lascia la stringa "wwwwww:sito.it" senza mettere nessun link... per scrupolo l'ho provata sia su php4 che su php5... non riesco a capire come mai non ti funziona...  :(

risposto 7 anni fa
guidoch
X 0 X

Ho messo così \' e funziona e in più nel textarea si lika, risolto!

Ora tenterò di formattarlo con il css

$messaggio = preg_replace('/((http(s)?:\/\/)|(www\.))([a-z0-9][-.a-z0-9]+)((\.[a-z]{2,4})[?\/]?)([?\/][-_~;:.,\'*^+()=!|?£§$%&#A-Za-z0-9\/]*)?/i','<a href="\\0"target=\"_blank\">\\0</a>',$messaggio);
risposto 7 anni fa
php
php
6
X 0 X

Bene!  :D Buon lavoro e alla prossima!

risposto 7 anni fa
guidoch
X 0 X
Bene!  :D Buon lavoro e alla prossima!

Nel tentativo di formattare sto fallendo, ora apro un nuovo post O0

risposto 7 anni fa
php
php
6
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda