L'apice....croce e delizia

venerdì 12 dicembre 2008 - 12.43

stuzzo Profilo | Junior Member

Ciao a tutti!
Che l'apice non sia un carattere tanto carino è ben noto....mi aiutate?
- Sto lavorando ad un'applicazione che ha un comportamento un po' strano...effettuo la ricerca con una parola che contiene l'apice (auto d'epoca). A livello di query questo problema viene gestito prima che si inviino i dati all'SQL, attraverso una mappatura e quindi la ricerca va a buon fine....
Il problema ce l'ho su cb e precisamente nel creare l'url risultante della ricerca. L'url viene creato in maniera corretta(ho controllato tramite debug), ma nel momento che viene passato al comando hRef(DataBinder.Eval(Container.DataItem, "ID") + "") tutto ciò che si trova dall'apice (compreso)in poi viene troncato.
Mi sapete dire il perchè e come faccio a gestire questo problema? Ho provato anche ad utilizzare la funzione Server.UrlEncode ma il troncamente avviene ugualmente.

Grazie a tutti!
Ciao
Alfredo Aiello

rossimarko Profilo | Guru

Ciao,

guarda il codice html generato dal pulsante, facendo view source sulla tua pagina html. Molto provabilmente l'apice verrà interpretato dal browser come un carettere che termina la proprietà href e quindi non viene visualizzato correttamente..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

>Ciao,
>
>guarda il codice html generato dal pulsante, facendo view source
>sulla tua pagina html. Molto provabilmente l'apice verrà interpretato
>dal browser come un carettere che termina la proprietà href e
>quindi non viene visualizzato correttamente..

Ciao,
eh si è proprio così, ma non so come ovviare a questo problema. Ho provato molte funzioni tipo server.htmlencode o server.urlencode ma senza risultato. Sai come posso ovviaer?
Grazie!

Alfredo Aiello

rossimarko Profilo | Guru

Penso che l'unico modo sia non mettere l'apice.. Come mai usi l'apice nel link? Non hai degli identificativi numerici da poter utilizzare (ID o altre chiavi primarie) invece che l'apice?

Altrimenti dovrai fare una sostituzione dell'apice con un carattere diverso e poi riconvertirlo
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

balfaz Profilo | Expert

scusa Rossi se mi metto, ma Stuzzo non può fare un server.HTMLencode prima d'inviare i dati e poi quando costruisci l'url usare server.HTMLdecode per farlo tornare allo stato originale, occhio parlo....anzi scrivo, secondo quello che ho capito. Mi spiego meglio

Dim href As HyperLink
href.Text = DataBinder.Eval(Container.DataItem, "ID")
href.NavigateUrl = Server.HtmlEncode(DataBinder.Eval(Container.DataItem, "ID"))

è una idea veloce che vi espongo.
SALUTONE!!!

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

balfaz Profilo | Expert

non so come mai è un periodo nel quale se duplicano i thread, comunque ho visto che anche Wamba ha avuto una idea simile alla mia, nel thread precedente.

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

rossimarko Profilo | Guru

>scusa Rossi se mi metto, ma Stuzzo non può fare un server.HTMLencode
>prima d'inviare i dati e poi quando costruisci l'url usare server.HTMLdecode
>per farlo tornare allo stato originale, occhio parlo....anzi
>scrivo, secondo quello che ho capito.

Si certo, la mia intenzione era capire se questo campo deve per forza essere messo come riferimento nel link o se ci sono altre possibilità (vedi un campo id numerico o altro).

Comunque nessun problema, aspettiamo una risposta per capire qual'è la situazione..

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

Buongiorno a tutti!

Cerco di rispondere un po' a tutti :)
Chiedo scusa per il thread duplicato ma il server mi ha dato errore la prima volta che l'avevo creato, non pensavo che fosse stato pubblicato ugualmente.
Purtroppo, non per scelta mia, l'applicazione si crea l'url oltre che con l'ID anche con la parola chiave, nel caso sia utilizzata.
Ho già provato a fare come mi aveva gentilmente consigliato Wamba, ma sia con Server.UrlEncode che con Server.HTMLEncode il carattere apice non viene sostituito. L'unica cosa che ho notato è che HTMLEncode mi cambia lo spazio in %20, ma dell'apice niente. A questo punto devo creare un controllo a mano che faccia una mappatura dei caratteri speciali e modificarli con il loro codice. Non vedo altra soluzione.
Nel frattempo aggiungo....Ma è possibile che non riesco a fargli riconoscere un apice??
string b;
foreach (char ch in pParola)
{
if (ch.Equals("' ")) --> non lo riconosce nè così e nè ("\' ") Ho messo lo spazio solo per farvi capire.
{
b = "%27";
}
else
{
b = ch.ToString();
}
b += b;
}
return b;

Dite che sbaglio?
Ciao e grazie a tutti!

Alfredo Aiello

stuzzo Profilo | Junior Member

Ok ragazzi per adesso ho risolto così! Me l'accetto da solo la risposta :P ?

int a = pParola.IndexOf("'");
string b = pParola;
if (a != 0)
{
b = pParola.Replace("'", "%27");
}
return b;

Ovviamente se avete qualche consiglio, ben venga!
Ciao

Alfredo Aiello

rossimarko Profilo | Guru

>Ok ragazzi per adesso ho risolto così! Me l'accetto da solo la
>risposta :P ?
>
>int a = pParola.IndexOf("'");
> string b = pParola;
> if (a != 0)
> {
> b = pParola.Replace("'", "%27");
> }
> return b;
>
>Ovviamente se avete qualche consiglio, ben venga!
>Ciao
>

Ti consiglio di scriverla così, solo per una maggiore leggibilità:

if (pParola.IndexOf("'") != 0) { return pParola.Replace("'", "%27"); } else { return pParola; }
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

>Ti consiglio di scriverla così, solo per una maggiore leggibilità:
>
>if (pParola.IndexOf("'") != 0)
>{
>return pParola.Replace("'", "%27");
>}
>else
>{
>return pParola;
>}

Grazie del consiglio!
Ciao :)

Alfredo Aiello
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5