2010-01-14 13 views
5

Ho un upload di file molto semplice che consente agli utenti di caricare file PDF. In un'altra pagina, quindi, faccio riferimento a quei file tramite un tag di ancoraggio. Tuttavia, sembra che quando un utente carica un file che contiene il cancelletto (#) rompa il tag di ancoraggio. Non causa alcun tipo di errore Coldfusion, semplicemente non riesce a trovare il file. Se rimuovo il #, funziona bene. Sono sicuro che ci sono un certo numero di altri personaggi che avrebbero lo stesso problema.Segno cancelletto (#) nel nome del file che causa l'errore

Ho provato a inserire URLEncodedFormat() attorno al nome del file all'interno dell'ancora ma ciò non aiuta. L'unica altra cosa che potevo pensare era di rinominare il file ogni volta che è stato caricato e rimuovere il carattere "#" (e qualsiasi altro carattere "cattivo").

Ci deve essere una soluzione più semplice. Qualche idea?

+0

rinomina il file ogni volta che è stato caricato e rimuove il carattere "#" (e qualsiasi altro carattere "cattivo"). Sì. – Henry

risposta

5

Se si controlla il codice di caricamento del file Provare a convalidare la stringa con

IsValid("url",usersFileName) or 
IsValid("regex",usersFileName,"[a-zA-Z0-9]") 

In caso contrario, se hai dimestichezza con regex vorrei suggerire qualcosa come i manifesti precedenti sono commentando

REReplace(usersfilename,"[^a-zA-Z0-9]","","ALL") 

Questi campioni supponiamo che aggiungerai il ".pdf" e permetti solo lettere e numeri. Se avete bisogno di sottolineatura o il periodo che sarebbe simile a questa ...

REReplace(usersfilename,"[^a-zA-Z0-9\._]","","ALL") 

io non sono un guru regex, se ho uno di questi sbagliato sono sicuro molti salterà dentro e mi corregga :)

+1

Sì, facciamo qualcosa di simile a quest'ultima espressione. Ma sostituisci i caratteri rimossi con qualcosa come "_" per rendere ovvio che il nome del file è stato alterato. Preferenza strettamente personale però :) – Leigh

+0

Questo è un approccio abbastanza buono. Vorrei aver pensato a questo. –

+0

Questo è più o meno quello che faccio. Come Leigh, sostituisco tutti i caratteri sostituiti con "_" come avviso per l'utente. – ale

0

I segni di cancelletto non sono legali all'interno dei nomi di file sul Web. Sono utilizzati per gli obiettivi di ancoraggio in-page:

<a name="target"> 

Quindi, se avete il file # name.pdf, il browser è in realtà cercando il "file" di file e l'ancora "name.pdf" interna.

Sì, sarà necessario rinominare i file durante il caricamento.

+0

Capisco che dovrò rinominare. La mia domanda sarebbe qual è la soluzione più semplice per prendersi cura del carattere # e di tutti gli altri che potrebbero causare problemi. – Jason

+0

check out replace() o replaceList() – Henry

+1

@Ben - Potrei sbagliarmi, ma non credo che tu debba "rinominare". La codifica corretta del simbolo # dovrebbe funzionare (ad es. File% 23.pdf). Ma sono d'accordo sul fatto che la rinomina sia l'opzione migliore qui (soprattutto data la sensibilità di CF a #). – Leigh

-1

Probabilmente dovresti sostituire # con ## per evitare questo, penso che questo sia causato perché # è la parola chiave Coldfusion.

+2

Non ci sono problemi in Coldfusion. Il problema è che lo legge come un'ancora con nome sulla pagina. – Jason

0

Non posso ancora commentare, ma la soluzione di Kevink è buona a meno che non sia necessario perseverare in quello che si sta sostituendo.

Ci siamo imbattuti in un'istanza in cui dovevamo rinominare il nome del file ma il nome del file doveva essere in qualche modo preservato (requisito dell'utente). La semplice rimozione di caratteri speciali non era un'opzione. Di conseguenza abbiamo dovuto gestire ogni sostituzione individualmente, qualcosa di simile.

<cfset newName = replace(thisFile, "##", "(pound)", "All")> 
<cfset newName = replace(newName , "&", "(amp)", "All")> 
<cffile action="rename"source = "#ExpandPath("\uploads\#thisFolder#\#thisFile#")#" destination = "#newName#"> 
Problemi correlati