Newsgroup: it.comp.www.php
Titolo: Quale controllo sui nomi file da uplodare?

Carico delle immagini ed uso come nome per queste il titolo del prodotto.
In casi tipo
"d'amore"
lo script che controlla le immissioni nel db mi traduce lo stesso in
"d\'amore"
Potete immaginare il danno quando questo file viene salvato con questo nome
d\'amore.jpg
Dovrei usare una cosa del tipo
$titolo = str_replace ($caratteri, '', $titolo);
La mia domanda č: quali sono i caratteri che dovrei eliminare? c'č una
funzione apposita che prevede questo caso?
grazie
Arjuna

 funzione apposita che prevede questo caso?
Io utilizzo questa funzione:
	function folder_from_text ($text = "")
	{
		$return = eregi_replace (" +", "_", $text); 
		$return = eregi_replace ("[^[:alnum:]_~-]+", "", $return); 
		$return = strtolower ($return);
		return $return;
	}
Con qualche modifica dovrebbe fare al caso tuo.
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

> Con qualche modifica dovrebbe fare al caso tuo.
scusami se insisto ma le espressioni regolari sono arabo per me.
Non so perchč ma la mia mente si rifiuta di capirle.
Per tanto non riesco a capire cosa intendi con qualche modifica?
Cosa dovrei modificare?
Grazie per la pazienza.
Arjuna
Ps: nel risponderti ho visto che Outlook usava come Ng per la risposta
quello sugli effetti speciali.
Ho dovuto per tanto riscrivere l'indirizzo a mano. Ne conosci il motivo?
Dipende dalle tue impostazioni o dalle mie?

 Ne conosci il motivo?  Dipende dalle tue impostazioni o dalle mie?
Errore mio, anche se involontario.


Quindi dovrò aggiungere caratteri come ' % $ etc?
Basta aggiungerli a finco?  {  "[^[:alnum:]_~-'%$]+"  }
Grazie
Arjuna

 Basta aggiungerli a finco?  {  "[^[:alnum:]_~-'%$]+"  }
No. L'espressione regolare utilizzata indica quali caratteri vengono
mantenuti e quali eliminati, e' molto piu' sicuro in questo modo.


 mantenuti e quali eliminati, e' molto piu' sicuro in questo modo.
[OT]Dopo un'intera giornata a lottare con Outlook e MR e NR vari ho optato
per l'accoppiata Thunderbird/Dialog. Sembra ottimo!!! [/OT]
Ho provato ad inserire il punto tra i caratteri da preservare ma non ci
sono riuscito. Ho provato con l'escape ma nemmeno va. { \. }
Come posso fare per inserire il punto?
Ho notato che la prima regola si occupa di sostituire gli spazi con '_' ma
sostituisce anche i caratteri accentati con spazi. 
Un testo del tipo "perchè l'amo" diventa "perch__lamo"
Non mi piace. Dovrei fare invece in modo che i caratteri accentati vengano
trasformati nei corrispettivi non accentati e l'apostrofo diventi un '_'.
Vorrei anche eliminare eventuali spazi all'inizio e alla fine.
Così l'esempio diventa "perche_l_amo", molto più ordinato.
Senza regolare gli spazi infatti una testo del tipo
"parlerò" diventerà "parler_" che non mi convince per nulla...
Spero di non aver abusato troppo della tua esperienza. Vorrei poter far da
me...
Arjuna
-- 
Gnotis se auton.
 20/03/2004 14.40.55

 Così l'esempio diventa "perche_l_amo", molto più ordinato.
Cosi' dovrebbe andare:
<?php 
function safe_filename ($filename = "")
{
	// sostituisco gli spazi (anche multipli) con _
	$return = eregi_replace (" +", "_", $filename); 
	$conversion_table = array ("à" => "a",
							   "è" => "e",
							   "é" => "e",
							   "ì" => "i",
							   "ò" => "o",
							   "ù" => "u",
							   "'" => "_",
							   "\"" => "_");
	// Sostituisco tutti i caratteri che fanno da chivi in 
	// $conversion_table con i relavitiv valori
	// Sistema molto comodo per mantenere/convertire i caratteri
	// con una certa liberta'.
	$return = str_replace (array_keys ($conversion_table),
array_values ($conversion_table),
 				     $return);
	// Elimino tutti i caratteri indesiderati. 
	$return = eregi_replace ("[^[:alnum:]_.~-]+", "", $return); 
	// La riga seguente e' opzionale.
	// Nel caso in cui vi siano "_" multipli li sostituisco con uno 		//
singolo, un po' "piu' bello" da vedere.
	$return = eregi_replace ("_+", "_", $return); 
	return $return;
}
// codice d'esempio
$file = "parlerò l'amo.exe";
print (safe_filename ($file));
?>
Restituisce:
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z


 Restituisce:
parlero_l_amo.exe
-- 
I am what I am, I do what I can


Non l'ho ancora provato ma mi sembra proprio quello che cercavo.
Nella guida a Dialog ho trovato una sezione molto dettagliata (corredata di
essercisi) sulle espressioni regolari... vuoi vedere che č la volta buona
che le imparo...
Grazie
Arjuna
-- 
Gnotis se auton.
 20/03/2004 15.44.07

 Non l'ho ancora provato ma mi sembra proprio quello che cercavo.
Perfetto, è proprio lui.
L'unica cosa che devo trovare è come troncare eventuali spazi vuoti alla
fine e all'inizio ma posso cavarmela anche da solo.
Grazie ancora
Arjuna
-- 
Gnotis se auton.
 20/03/2004 16.28.46

 alla fine e all'inizio ma posso cavarmela anche da solo.
http://www.php.net/trim


 
oggi e` la mia giornata fortunata :-)
e`esattamente la funzione che cercavo.. dopo una notte passata su 
"understaning regular expression" riesco quasi anche a capire le varie 
istruzioni...
-- 
Ciao,
Daniele