PDA

View Full Version : [php] Problema con la funzione trim()


$te
17-03-2010, 12:11
Salve, ho scoperto tempo fa che la funzione trim() non serve solo per togliere gli spazi, ma puoi fargli togliere ciò che vuoi.
Cosi ho creato questa funzione

function sicurezza($parola, $limite_nome)
{
$trim_nome = '0123456789*/.;:_£!?)((/&%çç*"+°><\'{}][~`^¢|¬#@|¬';
$parola = trim($parola , $trim_nome);

if ( strlen ( $parola ) > $limite_nome ) $parola = substr($parola, 0, $limite_nome);

return $parola;
}

In modo da restituire $parola "pulita", senza ne numeri, ne simboli strani e soprattutto maligni. Il problema é che funziona si e no! Le parentesi normali non me le toglie ad esempio!!

Ho sbagliato qualcosa?

grazie

$te
17-03-2010, 20:00
nessuna idea?

bobbytre
17-03-2010, 20:03
Salve, ho scoperto tempo fa che la funzione trim() non serve solo per togliere gli spazi, ma puoi fargli togliere ciò che vuoi.
Cosi ho creato questa funzione

function sicurezza($parola, $limite_nome)
{
$trim_nome = '0123456789*/.;:_£!?)((/&%çç*"+°><\'{}][~`^¢|¬#@|¬';
$parola = trim($parola , $trim_nome);

if ( strlen ( $parola ) > $limite_nome ) $parola = substr($parola, 0, $limite_nome);

return $parola;
}

In modo da restituire $parola "pulita", senza ne numeri, ne simboli strani e soprattutto maligni. Il problema é che funziona si e no! Le parentesi normali non me le toglie ad esempio!!

Ho sbagliato qualcosa?

grazie

ti consiglio di cercare informazioni sulle espressioni regolari e sulle funzioni di php preg_match , preg_match_all , preg_replace , ... , preg_*

non sono di immediata compresione ma una volta che le capisci , ti si apre un mondo nuovo !

$te
18-03-2010, 17:55
ti consiglio di cercare informazioni sulle espressioni regolari e sulle funzioni di php preg_match , preg_match_all , preg_replace , ... , preg_*

non sono di immediata compresione ma una volta che le capisci , ti si apre un mondo nuovo !
ok grazie! ma quindi dici di lasciar stare la funzione trim()?

cionci
19-03-2010, 07:56
Mi fai un esempio in cui non funziona ?

$te
19-03-2010, 09:52
Mi fai un esempio in cui non funziona ?
Ecco qui:

function sicurezza($parola, $limite_nome)
{
$trim_nome = '$0123456789*/.;:_£!?)((/&%çç*"+°><\'{}][~`^¢|¬#@|¬';
$parola = trim($parola , $trim_nome);

if ( strlen ( $parola ) > $limite_nome ) $parola = substr($parola, 0, $limite_nome);

return $parola;
}

$parola= 'bra$$$$1234 .-..';
echo sicurezza($parola, 12);
Output é questo: "bra$$$$1234 "


Non capisco proprio:P

cionci
19-03-2010, 10:06
Lo spazio dov'è fra i caratteri di trim_nome ? Non mi sembra che ci sia, in tal caso il risultato è corretto.

$te
19-03-2010, 10:51
Lo spazio dov'è fra i caratteri di trim_nome ? Non mi sembra che ci sia, in tal caso il risultato è corretto.

in che senso? allora nn ho capito come funziona..non dovrebbe eliminare i caratteri che sono all'interno di trim_nome?

cionci
19-03-2010, 10:55
in che senso? allora nn ho capito come funziona..non dovrebbe eliminare i caratteri che sono all'interno di trim_nome?
No, guarda solo all'inizio e alla fine della stringa e si ferma non appena trova un carattere non presente in trim_nome.

$te
19-03-2010, 10:59
a ma dai? quindi dovrei usare un while?
del tipo:

while(trim($parola , $trim_nome))
{
$parola = trim($parola , $trim_nome);
}

cionci
19-03-2010, 11:01
No, trim si ferma sempre allo stesso carattere.

$te
19-03-2010, 11:07
No, trim si ferma sempre allo stesso carattere.

cioé? quindi nn posso fare quello di cui ho bisogno con trim?

cionci
19-03-2010, 11:10
No

$te
19-03-2010, 13:42
Noe tu invece cosa mi consigli di usare?

Mattyfog
19-03-2010, 14:22
anche se non ho capito perchè non si può usare un while penso che dovrebbe andare se ripeti l'operazione senza alcun cliclo più volte e separando in + variabili $trim_nome
Facendo più o meno così:

$parola = trim($parola , '$');
$parola = trim($parola , '0');
$parola = trim($parola , '1');
$parola = trim($parola , '2');
$parola = trim($parola , '3');

eccetera

Ma ripeto, non avendo già capito perchè non si può usre il while non so se funzionerebbe.

cionci
19-03-2010, 15:33
Lui vuole sostituire anche all'interno della frase, non solo ai limiti esterni, quindi trim non va bene. Il consiglio sulle expressioni regolari è sicuramente valido.

Mattyfog
19-03-2010, 16:22
Ok :)

Mattyfog
19-03-2010, 16:22
Ok :)

kk3z
19-03-2010, 22:32
$stringa = preg_replace("#[^a-z]#i", "", $stringa);
http://codepad.org/epLdXk9h