15 messaggi dal 20 agosto 2011
buona sera a tutti.
Mi scuso anticipatamente se faccio una domanda magari già fatta. Vi confesso che ho qualche difficoltà di vista e data l'ora tarda, fatico nella ricerca.

Mi chiamo Maria ed espongo:
Gli articoli del mio blog, sono raccolti in un database Access. quando scrivo un articolo, dove vorrei inserire un link ad un sito esterno, uso la classica dicitura in HTML, ovvero clicca qui. Il collegamento non si attiva perchè nella barra dell'indirizzo vengono inserite anche le virgolette " in + del titolo, viene visualizzata solo la prima parola.
se tolgo le virgolette, il link si attiva ma non risolvo il problema del titolo ed il validator mi da degli errori.

Come risolvo? dov'è il problema?
Vi ringrazio anticipatamente.
Saluti, Maria

ps le virgolette, vengono tradotte col relativo codice carattere speciale..., proprio come accade in questo post.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Maria, il tuo blog è stato sviluppato da te, o comunque hai accesso al suo codice ASP? Te lo chiedo perché, senza vedere il codice che estrae l'articolo dal database Access e lo scrive nella pagina, è difficile immaginare la causa del problema.

whupy ha scritto:

se tolgo le virgolette, il link si attiva ma non risolvo il problema del titolo ed il validator mi da degli errori.

Nel frattempo, come soluzione temporanea, prova ad usare l'apice ' là dove metteresti le virgolette.

ciao,
Modificato da BrightSoul il 28 ottobre 2011 21.22 -

Enjoy learning and just keep making
15 messaggi dal 20 agosto 2011
cIAO, GRAZIE PER LA RISPOSTA.
Non l'ho scritto io ma da un vero programmatore (io sono solo un'apprendista), comunque ho accesso al codice asp. te lo posto, come messaggio o c'è un modo diveso per inviartelo?
a presto.
Maria
P.S. ho provato anche con l'apice ma anche quello viene riconvertito con il codice dei caratteri speciali.
Modificato da whupy il 28 ottobre 2011 21.42 -
11.886 messaggi dal 09 febbraio 2002
Contributi
sì, puoi postarlo qui come messaggio.

Inoltre, posta anche il pezzo di html prodotto. Lo puoi ottenere facendo tasto destro nella pagina del tuo blog -> Visualizza codice sorgente. Posta giusto un frammento, quello del link non funzionante.

ciao

Enjoy learning and just keep making
15 messaggi dal 20 agosto 2011
Ciao BrightSoul ti posto ciò che mi hai chiesto

CODICE HTML DEL LINK CON LE VIRGOLETTE (NON FUNZIONA)

<a href=&quot;http://www.subvedenti.it/Download.asp&quot; target=&quot;_blank&quot; title=&quot;In questa pagina internet dell&#39;Associazione Nazionale Subvedenti, puoi trovare risorse aggiuntivei&quot;>Download del sito dell&#39;A.N.S.</a>

CODICE HTML DEL LINK CON L'APOSTROFO (NON FUNZIONANTE)

<a href=&#39;http://www.prociechi.it&#39; target=&#39;_blank&#39; title=&#39;Visita il sito della Federazione Nazionale delle Istituzioni Pro Ciechi&#39;>Federazione Nazionale delle Istituzioni Pro Ciechi</a>

CODICE HTML LINK SENZA NULLA (FUNZIONANTE

<a href=http://shop.prociechi.it/catalog target=_blank title=Per il catalogo prodotti o la richiesta del bonus, visita l&#39;area Shop della Federazione Nazionale delle Istituzioni Pro Ciechi>clicca qui</a>

IN TUTTI E TRE I CASI, IL VALIDATOR DEL W3C MI SEGNALA LA PRESENZA DI ERRORI. LA PAGINA IN QUESTIONE è http://www.albinismo.eu/blog/index.asp?id=20

ORA TI POSTO IL CODICE ASP DELLA PAGINA:

<%Response.Buffer = True
Session("language")="it"
index="__INDEX__"%>
<!--#include file="ltr.asp" --><!--#include file="function.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=Session("language")%>" lang="<%=Session("language")%>">
<head>
<link rel="alternate" type="application/rss+xml" title="Albinismo blog (Atom)" href="http://www.albinismo.eu/public/atom.xml" />
<link rel="alternate" type="application/rss+xml" title="Albinismo blog (RSS)" href="http://www.albinismo.eu/public/rss.xml" />
<link rel="stylesheet" type="text/css" href="../style/style.css" />
<link rel="icon" type="image/ico" href="../images/favicon.ico" />
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Blog | Albinismo.eu</title>
</head>
<body>
<center>
<table border="0" width="90%">
<tr>
<td align="left">
<table border="0" width="100%">
<tr>
<td align="left">
<!--#include file="logo.asp" -->
</td>
<td>&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><hr size="4" style="color: #26619B" /></td>
</tr>
<tr>
<td align="center" valign="top">
<!--#include file="./barralink.asp" -->
</td>
</tr>
<tr>
<td align="center" valign="top">
<hr size="1" style="color: #26619B" />
</td>
</tr>
<tr>
<td>
<table border="0" width="100%">
<tr valign="top">
<td valign="top">
<table border="0" width="100%" summary="Blog del sito Albinismo.eu">
<%pag=0
totart=0
totpag=0
artpp=10
percorso=server.MapPath(".")
Set reo=New RegExp
With reo
.IgnoreCase=False
.Global=True
End With
reo.Pattern="blog"
percorso=reo.Replace(percorso, "")
Set reo=Nothing
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & percorso & "mdb-database\data.mdb","","PASSWOERDDB"
If Request.QueryString("id") <> "" Then
If Not isNumeric(Request.QueryString("id")) Then
id=1
ElseIf (Request.QueryString("id") > 0) Then
id=Int(Request.QueryString("id"))
Else
id=1
End If
sql="SELECT TOP 1 articoli.*, utenti.nick FROM (articoli INNER JOIN utenti ON utenti.id=articoli.autore) WHERE articoli.id=" & id & ";"
Else
sql="SELECT COUNT(*) AS tot FROM articoli;"
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open sql,conn,3,3
If (rs.RecordCount>0) Then
rs.MoveFirst
totart=rs.Fields("tot")
End If
rs.Close
Set rs=Nothing
totpag=-Int(-totart/artpp)
If Not isNumeric(Request.QueryString("pag")) Then
pag=1
ElseIf ((Int(Request.QueryString("pag")) > 0) And (Int(Request.QueryString("pag")) <= totpag)) Then
pag=Int(Request.QueryString("pag"))
Else
pag=1
End If
topc=pag*artpp
esclusi=(pag-1)*artpp
If esclusi <> 0 Then
sql="SELECT TOP " & artpp & " articoli.*, utenti.nick FROM (articoli INNER JOIN utenti ON utenti.id=articoli.autore) " &_
"WHERE id NOT IN (SELECT TOP " & esclusi & " id FROM articoli ORDER BY data DESC) " &_
"ORDER BY data DESC;"
Else
sql="SELECT TOP " & artpp & " articoli.*, utenti.nick FROM (articoli INNER JOIN utenti ON utenti.id=articoli.autore) ORDER BY data DESC;"
End If
End If
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open sql,conn,3,3
If (rs.RecordCount<>0) Then
rs.MoveFirst
Else%>
<tr>
<td align="center" valign="top" width="75%">
<font class="tart">Nessun articolo</font>
</td>
</tr>
<%End If
Set rsnc=Server.CreateObject("ADODB.Recordset")
Do Until rs.EOF
id=rs.Fields("id")
uid=rs.Fields("autore")
titolo=clearText(rs.Fields("titolo"))
articolo=clearText(rs.Fields("articolo"))
autore=clearText(rs.Fields("nick"))
data=rs.Fields("data")
sql="SELECT COUNT(*) AS tot FROM commenti WHERE artid=" & id & ";"
rsnc.Open sql,conn,3,3
If (rsnc.RecordCount>0) Then
rsnc.MoveFirst
totcomm=rsnc.Fields("tot")
End If
rsnc.Close
If rs.Fields("modificato") And rs.Fields("modifica")<>"" Then
datamodifica="; modificato il " & rs.Fields("modifica")
Else
datamodifica=""
End If
parentesi=false
link=0
If ((Session("nickLivello")>=10 And Session("nickID")=uid) Or (Session("nickLivello")>=100)) And Not manutenzione Then
parentesi=true
link=link+1
modifica="<a href=""../admin/formmodblog.asp?id=" & id & """ class=""menulinksmall"">Modifica</a>"
Else
modifica=""
End If
If ((Session("nickLivello")>=10 And Session("nickID")=uid) Or (Session("nickLivello")>=100)) And Not manutenzione Then
parentesi=true
link=link+1
rimuovi="<a href=""../admin/formdelblog.asp?id=" & id & """ class=""menulinksmall"">Rimuovi</a>"
Else
rimuovi=""
End If
If parentesi Then
paraperta="&nbsp;("
parchiusa=")"
Else
paraperta=""
parchiusa=""
End If
If link>=2 Then
punto="&nbsp;&middot;&nbsp;"
Else
punto=""
End If%>
<tr>
<td align="center" valign="top" width="75%">
<table border="0" width="100%">
<tr>
<td align="center" bgcolor="#26619B"><font class="headerbig"><%=titolo%></font></td>
</tr>
<tr>
<td><p class="bodynormal" align="justify"><%=articolo%></p></td>
</tr>
<tr>
<td><p class="ainfo" align="right">Postato da <%=autore%>, <%=data%><%=datamodifica%> <%=paraperta%><%=modifica%><%=punto%><%=rimuovi%><%=parchiusa%></p></td>
</tr>
</table>
</td>
<!--#include file="spacer.asp" -->
<td align="center" valign="top" bgcolor="#eeeeee">
<%If Request.QueryString("id") = "" Then%>
<!--#include file="bs.asp" -->
<%Else%>
<!--#include file="bc.asp" -->
<%End If%>
</td>
</tr>
<tr>
<td align="center" valign="top" colspan="3">
<hr size="1" style="color: #26619B" />
</td>
</tr>
<% rs.MoveNext
Loop
Set rsnc=Nothing
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing
If ((totpag > 1) And (Request.QueryString("id") = "")) Then
pagprev=pag-1
pagnext=pag+1%>
<tr>
<td align="left" valign="top" colspan="3">
<%If pagprev>0 Then%>
<a class="bodylinksmall" href="index.asp?pag=<%=pagprev%>">&laquo;Indietro</a>&nbsp;
<%End If
For i = 1 To totpag
If pag = i Then%>
<font class="bodysmall"><%=i%></font>&nbsp;
<%Else%>
<a class="bodylinksmall" href="index.asp?pag=<%=i%>"><%=i%></a>&nbsp;
<%End If
Next
If pagnext<=totpag Then%>
<a class="bodylinksmall" href="index.asp?pag=<%=pagnext%>">Avanti&raquo;</a>&nbsp;
<%End If%>
</td>
</tr>
<%End If%>
</table>
</td>
</tr>
</table>
<!--#include file="v.asp" -->
</td>
</tr>
</table>
</center>
</body>
</html>


UNA COSA CHE FORSE NON HO SPECIFICATO CON CHIAREZZA è CHE SE IL COLLEGAMENTO AD UNA PAGINA ESTERNA, LO SCRIVO NELLA PAGINA ASP, FUNZIONA CORETTAMENTE MA SE LO USO NELLA FINESTRA DI TESTO DEL BLOG (QUINDI TESTO GESTITO DAL DATABASE ACCESS) ALL'ORA NON FUNZIONA PERCHè MI CONFERTE SIA LE VIRGOLETTE SIA GLI APICI.
GRAZIE E TI AUGURO BUON POMERIGGIO.
MARIA
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
grazie per aver postato il codice, ora è più chiaro.

whupy ha scritto:

una cosa che forse non ho specificato con chiarezza è che se il collegamento ad una pagina esterna, lo scrivo nella pagina ASP, funziona correttamente ma se lo uso nella finestra di testo del blog (quindi testo gestito dal database access) allora non funziona perché mi converte sia le virgolette sia gli apici


sì, infatti dal codice vedo che, nel secondo caso, il testo che arriva dal database Access viene "elaborato" da una funzione che lo sviluppatore ha chiamato "clearText". Ecco la riga in cui avviene questo:
articolo=clearText(rs.Fields("articolo"))

Modifica quella riga nel modo seguente, così verifichiamo che sia effettivamente lei la causa:
articolo=rs.Fields("articolo")

Ora aggiorna la pagina e vedi se i link sono a posto. Appena hai verificato questo riporta la riga a com'era prima. I link torneranno a non funzionare ma è importante capire perché lo sviluppatore abbia voluto usare quella funzione che sostituisce le virgolette. Se sei in contatto con lui/lei chiediglielo. Di solito se ne usa una che impedisce del tutto la pubblicazione di link e altro contenuto html, oppure non se ne usa nessuna per dare completa libertà all'autore di un articolo.

Se non riesci ad ottenere una soluzione dallo sviluppatore, posta il contenuto della funzione "clearText", credo che la troverai nel file "function.asp" che è nella stessa cartella. Avendo a disposizione quel codice forse ti posso consigliare una modifica per sistemare il problema.

ciao,
Modificato da BrightSoul il 29 ottobre 2011 17.18 -

Enjoy learning and just keep making
15 messaggi dal 20 agosto 2011
Grazie per la celerità nella risposta!
Comunque hai fatto centro. Apportando la modifica che mi segnali, tutto funziona a dovere e, nessun errore dal w3c validator. Ciò che cambia è l'impaginazione ma probabilmente risolverei aggiungendo il tag <br />

Lo sviluppatore, al momento è un po' preso ma cercheremo di domandarglielo. Alla base della scelta, potrebbe esserci l'inesperienza di chi avrebbe "amministrato" il sito che aveva bisogno di qualcosa di semplice da gestire ed implementare. Tuttavia, gli eventi di questi anni (due convegni, l'aumento degli iscritti e quindi delle richieste e l'ampliamento del gruppo di lavoro, quindi nuove idee e progetti) hanno sicuramente mutato le esigenze. Ci stiamo rimboccando le maniche per non gravare sullo sviluppatore, fortemente oberato dal lavoro e dalla famiglia. Quindi, ci stiamo cimentando con entusiasmo ed evidenti limiti, nella sistemazione e manutenzione del sito. Le risorse in internet non mancano e tu, come questo stesso sito, ne siete la prova lampante.

Sapendo cosa guardare, ti dico che la stessa funzione la ritrovo anche nel forum.

comunque, ti posto la funzione clearText per le modifiche del caso:



<%
If index <> "__INDEX__" Then
Response.Redirect("index.asp")
End If
Function clearText(testo)
Dim carSpec(15,1)
max=0
carSpec(max,0)="(&)"
carSpec(max,1)="&amp;"
max=max+1
carSpec(max,0)="(&#8217;)"
carSpec(max,1)="&#39;"
max=max+1
carSpec(max,0)="(&#8220;)"
carSpec(max,1)="&ldquo;"
max=max+1
carSpec(max,0)="(&#8221;)"
carSpec(max,1)="&rdquo;"
max=max+1
carSpec(max,0)="(\x27)"
carSpec(max,1)="&#39;"
max=max+1
carSpec(max,0)="(\xB4)"
carSpec(max,1)="&acute;"
max=max+1
carSpec(max,0)="(\x60)"
carSpec(max,1)="&grave;"
max=max+1
carSpec(max,0)="(\x22)"
carSpec(max,1)="&quot;"
max=max+1
carSpec(max,0)="(\r\n)"
carSpec(max,1)="<br />"
max=max+1
carSpec(max,0)="(\r)"
carSpec(max,1)="<br />"
max=max+1
carSpec(max,0)="(\n)"
carSpec(max,1)="<br />"
max=max+1
Set reo=New RegExp
With reo
.IgnoreCase=False
.Global=True
End With
For i = 0 To max
reo.Pattern=carSpec(i,0)
testo=reo.Replace(testo, carSpec(i,1))
Next
For i = 128 To 255
aus=Hex(i)
reo.Pattern="(\x" & aus & ")"
testo=reo.Replace(testo, "&#" & i & ";")
Next
Set reo=Nothing
clearText=testo
End Function

nello stesso file funzioni.asp ne trovo altre due simili "clearTextHTML" e "clearTextXML" te le posto perchè mi paiono in qualche modo in relazione tra loro:

Function clearTextHTML(testo)
Dim carSpec(15,1)
max=0
carSpec(max,0)="(&)"
carSpec(max,1)="&amp;"
max=max+1
carSpec(max,0)="(<)"
carSpec(max,1)="&lt;"
max=max+1
carSpec(max,0)="(>)"
carSpec(max,1)="&gt;"
max=max+1
carSpec(max,0)="(&#8217;)"
carSpec(max,1)="&#146;"
max=max+1
carSpec(max,0)="(&#8220;)"
carSpec(max,1)="&ldquo;"
max=max+1
carSpec(max,0)="(&#8221;)"
carSpec(max,1)="&rdquo;"
max=max+1
carSpec(max,0)="(\x27)"
carSpec(max,1)="&#39;"
max=max+1
carSpec(max,0)="(\xB4)"
carSpec(max,1)="&acute;"
max=max+1
carSpec(max,0)="(\x60)"
carSpec(max,1)="&grave;"
max=max+1
carSpec(max,0)="(\x22)"
carSpec(max,1)="&quot;"
max=max+1
carSpec(max,0)="(\r\n)"
carSpec(max,1)="<br />"
max=max+1
carSpec(max,0)="(\r)"
carSpec(max,1)="<br />"
max=max+1
carSpec(max,0)="(\n)"
carSpec(max,1)="<br />"
max=max+1
Set reo=New RegExp
With reo
.IgnoreCase=False
.Global=True
End With
For i = 0 To max
reo.Pattern=carSpec(i,0)
testo=reo.Replace(testo, carSpec(i,1))
Next
For i = 128 To 255
aus=Hex(i)
reo.Pattern="(\x" & aus & ")"
testo=reo.Replace(testo, "&#" & i & ";")
Next
Set reo=Nothing
clearText=testo
End Function

Function clearTextXML(testo)
testo=clearText(testo)
Dim carSpec(15,1)
max=0
carSpec(max,0)="(<)"
carSpec(max,1)="&lt;"
max=max+1
carSpec(max,0)="(>)"
carSpec(max,1)="&gt;"
Set reo=New RegExp
With reo
.IgnoreCase=False
.Global=True
End With
For i = 0 To max
reo.Pattern=carSpec(i,0)
testo=reo.Replace(testo, carSpec(i,1))
Next
Set reo=Nothing
clearTextXML=testo
End Function



COMUNQUE, I NUOVI ARTICOLI NEL BLOG POSSONO ESSERE INSERITI SOLO DAGLI AMMINISTRATORI MENTRE I COMMENTI A TALI ARTICOLI ED I POST DEL FORUM, OVVIAMENTE, SONO INSERIBILI DAGLI ISCRITTI.
EVENTUALMENTE, SE NON TROPPO ARTICOLATO, è POSSIBILE MODIFICARE LE FUNZIONI CHE TI HO POSTATO IN MODO CHE SOLO GLI AMMINISTRATORI, POSSANO POSTARE I LINK? OPPURE, è POSSIBILE IMPEDIRE SOLO AI NORMALI UTENTI DI INSERIRE INDIRIZZI DI POSTA ELETTRONICA?

Ancora grazie per la consulenza. Maria
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

whupy ha scritto:

è possibile modificare le funzioni che ti ho postato in modo che solo gli amministratori postare i link

Credo che già funzioni così. Il codice che riguarda i commenti non lo vedo ma la presenza "clearTextHtml" mi fa pensare che il testo inserito dagli utenti venga filtrato da questa funzione. Essa rimpiazza anche i caratteri < e > che sono indispensabili per inserire nella pagina un qualsiasi elemento html, come appunto i link.

Invece, tornando alla funzione clearText, credo che il suo scopo fosse quello di sostituire determinati caratteri speciali (come ad esempio le lettere accentate) che in certi casi possono non essere visualizzate correttamente. Tuttavia non è necessario rimpiazzare anche i caratteri " e ' perché questi rientrano nel set base ASCII e perciò saranno sempre visualizzati correttamente da tutti.

Quindi, apporta queste modifiche alla funzione clearText. Si tratta semplicemente di anteporre un apice ' alle righe indicate. Quando ASP incontra una linea che inizia con l'apice la considererà un commento, ovvero una linea di testo che da non eseguire. E' un modo per escludere una porzione di codice senza cancellarla.

Le tre righe che riguardano l'apice...
'carSpec(max,0)="(\x27)"
'carSpec(max,1)="&#39;"
'max=max+1

...e le tre righe che riguardano le virgolette
'carSpec(max,0)="(\x22)"
'carSpec(max,1)="&quot ;"
'max=max+1


così dovrebbe andare. Quando possibile, però, informa lo sviluppatore di questo cambiamento.

ciao & buon weekend!
Modificato da BrightSoul il 29 ottobre 2011 19.39 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.