Newsgroup: it.comp.www.php
Titolo: Carattere di controllo tasto invio su una stringa.

Ciao a tutti,
ho questa funzione:
   function checkMask ($mask, $source) {
     $status = true;
     for ($counter=0; $counter < strlen($source); $counter++) {
        if (strpos($mask, $source[$counter]) === false ) {
           $status = $status && false;
    } else {
           $status = $status && true;
    }
   }
     return $status;
    }
il cui scopo è verificare se una stringa sorgente ($source) contiene 
solamente caratteri contenuti in $mask. Ok qualcuno, potrà obiettare che era 
meglio utilizzare le espressioni regolari etc, e in effetti ha ragione, ma 
ho volutamente preferito procedere in questo modo.
Il problema che mi si presenta è che all'interno di $mask dovrei includere 
anche l'equivalente del tasto "invio".
Come posso risolvere?
Grazie in anticipo, Cooper.
-- 
BlueWare WebStudio
 [web:] 
http://www.blueware.it
 [msn:] 
coo...@blueware.it
 [icq:] 146781935 

 includere anche l'equivalente del tasto "invio".
Il manuale, questo sconosciuto ...
http://www.php.net/manual/en/language.types.string.php#AEN2969
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.


Avevo pensato all'uso degli escape, ma nella funzione non è possibile. 
Infatti viene esaminato un carattere alla volta estretto da $source con un 
carattere contenuto in $mask.
Se metto:
$source = "a\n"
$mask = "abc\n"
la funzione esamina in tre cicli (0-2) i caratteri: a, \, n, e verifica che 
questi siano presenti in $mask. Poi resta il fatto che nella stringa non 
compare \n ma il codice ascii corrispondente al tasto invio, ovvero un 
codice di controllo.


 verifica che questi siano presenti in $mask. 
Seguendo la tua "logica" il seguente codice dovrebbe restituire 3 ma
non e' cosi:
<?php 
$mask = "a\n";
print(strlen($mask));
?>



La lunghezza della stringa è 3, ma la lettura dei caratteri parte dalla 
posizione 0 non da 1, quindi da 0 a 2.
$mask[0] = a
$mask[1] = \
$mask[2] = n
mi sembrava fosse chiaro questo, però non mi hai risposto alla domanda 
iniziale... se vuoi rispondermi restando in argomento ti sarei davvero 
grato, in questo momento sei andato ot, a quanto avevo chiesto.
Cmq sia, grazie ancora...


 in questo momento sei andato ot, a quanto avevo chiesto.
Convinto tu.



Ok capito che viene riconosciuto in automatico il \n, ma era sufficiente 
dirlo anzichè fare tutta questa storia. Forse per te che sei più pratico è 
ovvio... ma per gli altri... tieni conto che lo è anche un po meno.
In un altro linguaggio di programmazione dove non viene riconosciuti gli 
escape del tipo \n etc avrebbero esaminato la lunghezza non come un singolo 
bytes ma come due bytes.
Ok è una particolarità del php (e probabilmente anche del c), ma non è una 
regola assoluta.
Cmq chiarito tutto, grazie.


 Cooper.
Il risultato è 2 perchè \n è visto come "carattere" di new line
infatti
<?php
$mask="1234";
print(strlen($mask));
?>
restituisce 4
-- 
ORF3O
Untold Story , The
Regia: Herman Yau
Nazione: Hong Kong
http://www.asianworld.it/subrisultato.php?id_subq=347

 h una regola assoluta.
Idem come sopra.


In riferimento a quanto detto prima, con la function:
  function checkMask ($mask, $source) {
     $status = true;
     for ($counter=0; $counter < strlen($source); $counter++) {
        if (strpos($mask, $source[$counter]) === false ) {
           $status = $status && false;
    } else {
           $status = $status && true;
    }
   }
     return $status;
    }
ponendo:
$mask = 
"ABCDEFGHILMNOPQRSTUVZWYJKXabcdefghilmnopqrstuvzwyjkxŕčěňůé0123456789[]_-.,;:'?()=/!<> 
\n";
e $source una stringa qualsiasi avente uno o piů ritorni a capo (tasto 
invio) la funzione continua a restituire TRUE anzichč FALSE.
Ovviamente la stringa $source contiene tutti i caratteri inclusi in $mask, 
col relativo ritorno a capo (INVIO) che dovrebbe essere equivalente a \n.
Mi puoi, gentilmente spiegare perchč? Ti chiedo il favore di evitare il giro 
di parole, se per te ripeto la domanda č banale, per me lo č un po' meno :) 
quindi un po' piů di pazienza; fammi capire eventualmente dove sbaglio e 
come posso rimediare.
Grazie, Cooper.



Uhm, senza incazzarti, mi spieghi perchè sostieni che la function da me 
postata non funziona come dovrebbe? mi sembra adesso chiaro la funzione 
strlen interpreti \n come carattere unico della stringa e non come due 
caratteri distinti.
Ma qui si parla della funzione strlen... non della mia checkMask.


 me postata non funziona come dovrebbe? 
Non ho mai parlato di funzioni, ho parlato di codice:
[ti quoto]
$mask[0] = a
$mask[1] = \
$mask[2] = n
[/ti quoto]
[mi quoto]
$mask = "a\n";
print ($mask{0}); // restituisce "a"
print ($mask{1}); // restituisce "\n" in versione asci ovviamente
print ($mask{2}); // Notice: Uninitialized string offset: 2
[/mi quoto]
Hai protato a sostegno della tua affermazione "La lunghezza della
stringa h 3" un codice che di fatto non e' corretto e senza prenderti
la briga di verifircarlo.


 e $source una stringa qualsiasi avente uno o piy ritorni a capo
Sotto Windows il ritorno a capo e' composto da \r\n, sotto *nix e' \n e
sotto MAC e' \r.
Tralasciando il fatto che puoi sostituire tutta la funzione con una
singola chamata a preg_match, il tuo codice e' inefficiente.
Di fatto e' inutile continuare il ciclo se avviene $status viene
impostata a false perche' non potra' in nessun caso ritornare a true.



Ok chiarito l'equivoco, mi aspettavo che venissero interpretrati come tre 
caratteri distinti, poi ho capito che quel \n viene interpretrato come unico 
carattere, ok perfetto.
Il problema però non viene risolto.
Se in $source ho un ritorno a capo (invio) in $mask come dovrei impostarlo 
se fra gli altri caratteri, metto qualcosa del tipo: $mask = "......... \n"; 
la funzione checkMask non riconosce ugualmente il invio.
Non capisco quindi il motivo di questo diversità di comportamento fra strlen 
e strpos.



Non ti posso dare torto, ma come ho detto all'inizio:
<miquoto>
 Ok qualcuno, potrà obiettare che era
meglio utilizzare le espressioni regolari etc, e in effetti ha ragione, ma
ho volutamente preferito procedere in questo modo.
</miquoto>


 come valido.
Lo script a me funziona, e restituisce correttamente true, mentre se tolgo
\n da $mask mi restituisce false.
La prova l'ho effettuata assegnando un valore con riotrno a capo
direttamente nel codice, non da form, dunque il problema proviene dalla
form, credo
-- 
ORF3O
Frightful School Horror , A
Regia: Yamaguchi Makoto
Nazione: Giappone
http://www.asianworld.it/subrisultato.php?id_subq=225

</miquoto>
Aggiungi il \r alla maschera e sei a posto... anche perché, penso, il
carattere di ritorno a capo lo "crea" il client non il server.
Ciao
-- 
Per rispondermi togli il cappello

 con i ritorni a capo (invio) e non concludo nulla.
Se il browser usato gira sotto windows allora l'invio inviato al server
sara' quello di Windows.



Ok grazie mille :) adesso è tutto ok :) ho risolto il problema. Grazie anche 
agli altri che hanno contribuito nell'indicarmi la giusta strada.
Cooper


 [/mi quoto]
ecc...
I milanesi secondo una statistica passano due anni della loro vita a cercare
parcheggio.
SelectAstronomy a quotare
;-P
-- 
Armand Federico
www.armand.it
"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:lVILe.17517$HM1.4...@twister1.libero.it...


 SelectAstronomy a quotare
   ^^^
