Dubbi sulle espressioni regolari

Salve a tutti gente! Mi sto da poco avvicinando al mondo della programmazione PHP&MySQL; e devo dire che trovo le potenzialitá di questi linguaggi sono davvero fantastiche!!!

Per iniziare a studiare questa potente abbinata mi sono comprato un libro che spiega passo passo i vari passaggi per costruire un piccolo CMS, tutto rimanendo sempre sul semplice :P

Ah nn faccio il nome del libro perché nn vorrei fare pubblicitá occulta ma se qualcuno fosse interessato potrei inviarli l'editore e il titolo via pm, perché devo dire che lo ritengo veramente ben fatto!!!

Cmq adesso torniamo al mio problema....

Allora sviluppando questo piccolo CMS mi sono imbattuto nella realizzazione di un form nel quale posso immagazzinare il testo inserito dall'utente nel mio database; diciamo un pochetto come questo form che sto riempiendo per mandare il messaggio sul forum

Il libro mi dice che devo iniziare a tenere conto che qualche utente potrebbe inviare del codice malevolo per il mio sito, e per questo esiste la funzione:

htmlspecialchars()

che traduce tt i caratteri dannosi. Ma poi andando avanti voglio anche dare all'utente la possibilitá di inserire dei link a pagine esterne, nn utilizzando il codice VB ma un codice prodotto da me, sopratutto per capire meglio le cose

Il libro mi consiglia di utilizzare questa sintassi per i link che hanno come nome il loro stesso indirizzo, ovvero:

[L]http://www.html.it[EL]

che dovrá poi essere trasformato in questo:

<a href="http://www.phpnews.it">http://www.phpnews.it</a>

 per una corretta visualizzazione.

Il libro mi suggerisce questa espressione regolare per cercare di riconoscere la stringa che rappresenta il link:

\[L][-_./a-z0-9!&%#?+,'=:;@~]+\[EL]

Allora sinceramente quello che ho capito di questa espressione, e penso sia giusto é:

ignora il carattere speciale [ (che di conseguenza ignorerá anche la parentesi quadra di chiusura), cerca una o piú occorrenze dei caratteri presenti nel set di caratteri presenti tra parentesi quadre, e poi ignora nuovamente quello che é scritto tra parentesi quadre successivamente.

Ora i miei dubbi su questa espressione regolare sono:

1) Nn potrei tradurla in:

\[L][.]+\[EL]

visto che il carattere speciale . indica qualsiasi carattere tranne uno spazio, e se nn posso tradurla come mai é stato inserito nell'espressione???

2)Mentre scrivevo questo post un'altra cosa mi é balzata agli occhi... Come mai nn sono stati utilizzati i caratteri di escape per i caratteri speciali ? e + che sono presenti all'interno delle parentesi quadre? Nn si rende necessario leggere questi caratteri come dei caratteri normali e quindi senza considerare il loro valore speciale??

PS = La sintassi utilizzata per le espressioni regolari é quella propria delle espressione, e nn quella unita a PHP dove é necessario utilizzare i doppi backslash (\\) per far leggere al linguaggio lato server la backslash utilizzata nell'espressione.

Spero di esser stato chiaro nell'esporre i miei dubbi e colgo l'occasione per ringraziarvi in anticipo delle vostre risposte!!!

Grazie a tutti ragazzi!!!

inviato 10 anni fa
Pr0v4
X 0 X

I tuoi dubbi sono fondati. Basta fare qualche esempio per verificare che hai ragione:

<?php
$testo = "[L]http://www.phpnews.it[EL]";

preg_match("/\[L](.*)\[EL]/",$testo,$match);

$link = htmlspecialchars($match[1]);

echo "<a href=\"$link\">$link</a>";
?>

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda