Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439

    [php] help regular expression

    *
    scusate ho fatto un errore
    わさび

  2. #2
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439

    Re: [php] help regular expression

    Salve, ho elaborato questa:
    [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;
    }
    [/supersaibal]
    ma non funziona come vorrei.
    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?
    わさび

  3. #3
    prova a usare str_replace(); anzichè le espressioni regolari.. la applichi tante volte quante sono le conversioni da fare..

  4. #4
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [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]
    Grazie x il reply,
    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:
    わさび

  5. #5
    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..

  6. #6
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [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]
    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à...
    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
    わさび

  7. #7
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Sono giunto a questa che funziona un po' meglio ma ancora non ho trovato la soluzione:
    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;
    }
    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 = eregireplace("[\t", 
    "\040", var); var = eregireplace("[’‘", "'", var); var = 
    eregireplace("[“”""", "\"", var); var = 
    eregireplace("[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))

    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:
    わさび

  8. #8
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Non riuscendo a risolvere ho scritto una parte della funzione escludendo l'ultima riga,
    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;
    }
    per controllare il funzionamento.
    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:
    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;
    
    ?>
    e in output ho:
    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; }
    ...come mi aspettavo.
    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ì:
    Codice PHP:
    $jmnome = isset($_POST['jmnome']) ? $jmnome "";
    $jmcognome = isset($_POST['jmcognome']) ? $jmcognome ""
    dopodicchè subito passo la funzione su tutte le variabili contenenti del testo scritto da un utente:
    Codice PHP:
    $jmnome normalize($jmnome);
    $jmcognome normalize($jmcognome); 
    ...dopodicchè lo script continua inserendo il tutto in un database etc. etc. ma le variabili non vengono in nessun modo modificate...
    ...perchè quando uso la funzione nel mio script cessa di funzionare? :master: :master:
    わさび

  9. #9
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    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...
    わさび

  10. #10
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    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?
    わさび

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.