Ho un sito, ho un database, alcuni utenti inseriscono i loro links ma non conoscono nulla di html. Quante volte hai fatto questo ragionamento?. Come automatizzare questo lavoro?
Ci sono due modi: usare un editor html via Internet Explorer oppure usare le regular expressions.
Creare un html editor basato sul web è piuttosto difficile ma ci sono alcuni esempi sul web, e un paio di extensions per
Macromedia Dreamweaver.
Le espressioni regolari sono un potente add-on per le nostre applicazioni web e possiamo risolvere il nostro problema.
Ho usato C# come linguaggio di base.
Apri un documento nel tuo editor di file .aspx e scrivi:
<%@ Page Language="C#" debug="true"
%>Abbiamo dichiarato con che linguaggio la nostr pagina viene eseguita.
Ora aggiungiamo alcuni tag html
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">aggiungiamo il tag "script":
<script language="C#" runat="server"> quindi creiamo la funzione:
public string fetchURL (string message) {Dichiarando la funzione abbiamo aggiunto una variabile: message
Questa è la stringa di input, senza nessun link attivo.
Ora il codice: niente paura!!
Dichiariamo delle variabili:
string strInput = message;
string strResult;Creiamo un pattern per eseguire il link che inizi con il suffisso HTTP (come ad esempio Http://www.dopostback.com/)
string strPattern = @"(?<url>http://(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&~=]*[^.])?)";
Quindi il codice qui di seguito:
string strReplace = "<a href=\"$&\" target=_blank>$&</a>";
via con la sostituzione:
strResult = Regex.Replace(strInput, strPattern, strReplace);
Dobbiamo però aggiungere un codice extra per essere sicuri che ogni link sia attivato.
Questo codice è simile al precedente.
strPattern = @"(?<!http://)(?<url>www\.(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&~=]*[^.])?)";
strReplace = "<a href=\"http://$&\" target=_blank>http://$&</a>";
strResult = Regex.Replace(strResult, strPattern, strReplace);
Fatto. Ma non è abbastanza. Possiamo attivare anche un link e-mail ed un link ftp.
Link per l'e-mail:
strPattern = @"(?<url>\w+\@\w+\.\w+ ?)";
strReplace = "<a href=mailto:$&>$&</a>";
strResult = Regex.Replace(strResult, strPattern, strReplace);
Per il link FTP usiamo lo stesso ragionamento dell'HTTP:
Se il prefisso ftp:// è presente:
strPattern = @"(?<url>ftp://(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&~=]*[^.])?)";
strReplace = "<a href=\"$&\" target=_blank>$&</a>";
strResult = Regex.Replace(strResult, strPattern, strReplace);
oppure no:
strPattern = @"(?<!ftp://)(?<url>ftp\.(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&~=]*[^.])?)";
strReplace = "<a href=\"ftp://$&\" target=_blank>$&</a>";
strResult = Regex.Replace(strResult, strPattern, strReplace);
Ora non rimane che ritornare una nuova variabile con tutti i cambiamente e
chiudere la funzione:
return strResult;
Per test possiamo usare una semplice stringa:
void page_load(object sender, System.EventArgs e){
string strOut = "Ciao! sono Valerio ed il mio sito è
http://www.dopostback.com/
la mia email è do@dopostback.com. Spiacente ma il mio ftp ftp ftp.dopostback.com
è chiuso";
string strOut2 = fetchURL(strOut);
Response.Write(strOut2);
}
Infine chiudiamo il tag script e gli atri tag html.
</script>
</head>
<body>
</body>
</html>
Questo è tutto! Salviamo questa pagina nel nostro web server come regularexpressiontest.aspx e proviamola.
A questo punto sei in grado di riutilizzare questa funzione per gli altri tuoi script!