*
scusate ho fatto un errore
*
scusate ho fatto un errore
わさび
Salve, ho elaborato questa:
ma non funziona come vorrei.[supersaibal][/supersaibal]codice:function normalize($var) { $var = eregi_replace("[\t]", "\040", $var); $var = eregi_replace("[’‘]", "'", $var); $var = eregi_replace("[“”«»]", "\"", $var); $var = eregi_replace("^([\w\040\.,;\"'@\?\\/\(\)-\+!à-ïñ-öù-ýÀ-ÏÑ-ÖÙ-Ý&\n])+", "", $var); return $var; }
In pratica vorrei
trasformare i tab in spazi
gli apici inclinati in apici semplici
i doppi apici inclinati in doppi apici semplici
infine eliminare tutti i caratteri che possono dar fastidio in un successivo encoding utf8, stampa, inserimento in un database etc. etc.
i return (\n) possono rimanere in quanto successivamente a seconda dell'esigenza li elimino/traformo.
Qualcuno sa aiutarmi?![]()
![]()
わさび
prova a usare str_replace(); anzichè le espressioni regolari.. la applichi tante volte quante sono le conversioni da fare..
Grazie x il reply,[supersaibal]Originariamente inviato da pablopuello
prova a usare str_replace(); anzichè le espressioni regolari.. la applichi tante volte quante sono le conversioni da fare.. [/supersaibal]
Si, in effetti le prime 3 potrebbero essere sostituite con str_replace ma la quarta, la più importante mi filtra qualunque carattere non elencato e elaborarla con un str_replace sarebbe lunghissimo, oltre che credo dispendioso...
:master:
わさび
str_replace non è dispendiosissimo, e cmq lo è molto meno che le ereg da quel che ho letto;
poi str_replace dovrebbe supportare gli array e quindi sarebbe solo 1 rigo di codice..
Si, sono al corrente che str_replace sia meno dispendioso di un ereg, però quello che volevo dire è che questo filtro mi servirà sia online (ma anche e soprattutto in locale per filtrare dei dati) quindi diciamo pure che il sovraccaricamento della macchina potrebbe non essere una priorità...[supersaibal]Originariamente inviato da pablopuello
str_replace non è dispendiosissimo, e cmq lo è molto meno che le ereg da quel che ho letto;
poi str_replace dovrebbe supportare gli array e quindi sarebbe solo 1 rigo di codice.. [/supersaibal]
il problema è che scrivere questa
$var = eregi_replace("^([\w\040\.,;\"'@\?\\/\(\)-\+!à-ïñ-öù-ýÀ-ÏÑ-ÖÙ-Ý&\n])+", "", $var);
con un str_replace anche contenente array verrebbe fuori una cosa lunghissima...
non so perchè ma già l'ho utilizzata altre volte e mi è sembrato che funzionasse invece ora ho notato che non funziona esattamente come vorrei![]()
わさび
Sono giunto a questa che funziona un po' meglio ma ancora non ho trovato la soluzione:
Ho parvato a passare a normalize il testo della stessa funzione normalize (che quindi contiene tab, return e virgolettati e mi ha restituito questa:codice:function normalize($var) { $var = eregi_replace("[\t]", "\040", $var); $var = eregi_replace("[’‘]", "'", $var); $var = eregi_replace("[“”«»]", "\"", $var); $var = eregi_replace("[^a-z0-9\040\.,;\"'@\?\\/\(\)-\+!à-ïñ-öù-ýÀ-ÏÑ-ÖÙ-Ý&\n]", "", $var); return $var; }
((i return ce li ho messi io per non far allungare troppo la pagina del thread ma è tutto su una riga))codice:function normalize(var) var = eregireplace("[\t", "\040", var); var = eregireplace("[’‘", "'", var); var = eregireplace("[“”""", "\"", var); var = eregireplace("[a-z0-9\040\.,;\"'@\?\\/\(\)-\+!---À---&\n", "", var); return var;
In pratica, dei virgolettati se ne è infischiato,
i return li doveva lasciare e me li ha cancellati
per i tab ok
mi ha cacellato le quadre chiuse ] e non le aperte [ ???
hmm :master:
わさび
Non riuscendo a risolvere ho scritto una parte della funzione escludendo l'ultima riga,
per controllare il funzionamento.codice:function normalize($var) { $var = trim($var); $patterns = array("\t", "’", "‘", "“", "”", "«", "»"); $replacements = array("TAB", "APOS", "APOS", "QUOT", "QUOT", "QUOT", "QUOT"); $var = str_replace($patterns, $replacements, $var); return $var; }
Ho sostituito con lo script precedente e ha continuato a non funzionare...
Allora ho portato questo script su un altro file per controllarlo meglio e ho notato che invece funziona... quindi l'errore non deve essere nello str_replace ne tantomeno nella regular expression che prima funzionava.
Ho fatto così su un nuovo documento php:
e in output ho:codice:<?php function normalize($var) { $var = trim($var); $patterns = array("\t", "’", "‘", "“", "”", "«", "»"); $replacements = array("TAB", "APOS", "APOS", "QUOT", "QUOT", "QUOT", "QUOT"); $var = str_replace($patterns, $replacements, $var); return $var; } $passedvar = "‘ciao’ “ciriciao” «ciriciriciao»"; $passedvar = normalize($passedvar); print $passedvar; print " "; $passedvar = "function normalize(\$var) { \$var = trim(\$var); \$patterns = array(\"\t\", \"’\", \"‘\", \"“\", \"”\", \"«\", \"»\"); \$replacements = array(\"TAB\", \"APOS\", \"APOS\", \"QUOT\", \"QUOT\", \"QUOT\", \"QUOT\"); \$var = str_replace(\$patterns, \$replacements, \$var); return \$var; }"; $passedvar = normalize($passedvar); print $passedvar; ?>
...come mi aspettavo.APOSciaoAPOSTABQUOTciriciaoQUOTTABQUOTciriciriciao QUOT
function normalize($var) { TAB$var = trim($var);
TAB$patterns = array("TAB", "APOS", "APOS", "QUOT", "QUOT",
"QUOT", "QUOT"); TAB$replacements = array("TAB", "APOS",
"APOS", "QUOT", "QUOT", "QUOT", "QUOT"); TAB$var =
str_replace($patterns, $replacements, $var); TABreturn $var; }
Quindi funziona... ma mettendo lo stesso identico script nel mio file php che recupera in $_POST delle variabili invece non funziona...
da cosa può dipendere?
Come dicevo, le variabili le recupero in $_POST così:
dopodicchè subito passo la funzione su tutte le variabili contenenti del testo scritto da un utente:Codice PHP:
$jmnome = isset($_POST['jmnome']) ? $jmnome : "";
$jmcognome = isset($_POST['jmcognome']) ? $jmcognome : "";
...dopodicchè lo script continua inserendo il tutto in un database etc. etc. ma le variabili non vengono in nessun modo modificate...Codice PHP:
$jmnome = normalize($jmnome);
$jmcognome = normalize($jmcognome);
...perchè quando uso la funzione nel mio script cessa di funzionare? :master::master:
![]()
わさび
ultimo uppete![]()
non riesco ad uscirne...
1) nel mio script la funzione sembra non fare nulla
2) messo fuori funziona tutto eccetto l'ultima riga,
quella che dovrebbe eliminare i caratteri pericolosi...
わさび
Nessuno sa aiutarmi?
HO provato a leggere guide sulle reg. expression ma non riesco a fare una cosa:
per le altre ci sono riuscito bene o male ma per l'ultimo punto no.
Ossia non riesco a cancellare da una stringa i caratteri non desiderati.
Ad esempio se faccio [^a-z0-9\040] come la scrivo per cancellare i valori al di fuori di questa espressione?
わさび