Domanda

Sto per creare unità di convalida del modulo che, oltre a codifica dei controlli di test "regolari".

Secondo questo articolo http://www.w3.org/International/questions/qa-forms-utf-8 I caratteri consentiti sono CR, LF e Tab nell'intervallo 0-31, il Del = 127 non consentito.

D'altra parte, ci sono caratteri di controllo nell'intervallo 0x80-0xA0.In diverse fonti avevo visto che sono ammessi e che no.Inoltre avevo visto che questo è diverso per XHTML, HTML e XML.

Alcuni articoli avevano detto che è consentito anche il FF?

Qualcuno può fornire una buona risposta con le fonti su cosa può essere dato e cosa no?

MODIFICARE:Anche lì http://www.w3.org/International/questions/qa-controls qualche ambiguità

È supportata la gamma C1

Ma la tabella mostra che sono illegali e le convalide UTF-8 mostrate in precedenza lo consentono?

È stato utile?

Soluzione

I caratteri Unicode in questi intervalli sono validi in HTML 4.01:

0x09..0x0A
0x0D
0x20..0x7E
0x00A0..0xD7FF
0xE000..0x10FFFF    

Nell'XHTML 1.0...non è chiaro.Vedere http://cmsmcq.com/2007/C1.xml#o127626258

Altri suggerimenti

Penso che tu stia guardando la cosa nel modo sbagliato.Le risorse collegate specificano in quali valori codificati sono validi (X)HTML, ma sembra che tu voglia convalidare la "risposta" da un modulo Web, ad esempio i valori dei vari controlli del modulo, restituiti al tuo server.In tal caso, non dovresti guardare cosa è valido in (X)HTML, ma cosa è valido in application/x-www-form-urlencoded, e forse anche multipart/form-data, tipi MIME.IL Standard HTML 4.01 per <FORM> elementi afferma chiaramente che per application/x-www-form-urlencoded, "i caratteri non alfanumerici vengono sostituiti da '%HH'":

Questo è il tipo di contenuto predefinito.I moduli inviati con questo tipo di contenuto devono essere codificati come segue:

  1. I nomi e i valori dei controlli vengono sottoposti a escape.I caratteri spazio vengono sostituiti da "+", quindi i caratteri riservati vengono sottoposti a escape come descritto in [RFC1738], sezione 2.2:I caratteri non alfanumerici vengono sostituiti da '%HH', un segno di percentuale e due cifre esadecimali che rappresentano il codice ASCII del carattere.Le interruzioni di riga sono rappresentate come coppie "CR LF" (ad esempio, `%0D%0A').
  2. I nomi/valori dei controlli sono elencati nell'ordine in cui appaiono nel documento.Il nome è separato dal valore da '=' e le coppie nome/valore sono separate l'una dall'altra da '&'.

Per quanto riguarda la codifica dei caratteri contenuta (ad es.se %A0 è uno spazio unificatore o un errore), che viene negoziato da accept-charset attribuire sul tuo <FORM> elemento e la risposta (beh, davvero a GET O POST richiesta) Content-Type intestazione.

Legge di Postel:Sii conservatore in quello che fai;sii liberale in ciò che accetti dagli altri.

Se stai generando documenti affinché altri possano leggerli, dovresti evitare/sfuggire a tutti i caratteri di controllo, anche se tecnicamente sono legali.E se stai analizzando documenti, dovresti cercare di accettare tutti i caratteri di controllo anche se tecnicamente illegali.

Innanzitutto qualsiasi ottetto è valido.IL menzionata l'espressione regolare per le sequenze UTF-8 ne omette semplicemente alcuni poiché nella pratica è piuttosto raro che vengano inseriti da un utente.Ma ciò non significa che non siano validi.Semplicemente non è previsto che si verifichino.

Il primo collegamento che menzioni non ha nulla a che fare con la convalida dei caratteri consentiti in XHTML...l'esempio su quel collegamento mostra semplicemente un modello comune/generico per rilevare se i dati grezzi sono o meno nella codifica utf-8 o meno.

Questa è una citazione dal secondo link:

HTML, XHTML e XML 1.0 non supportano l'intervallo C0, ad eccezione di HT (tabulazione orizzontale) U+0009, LF (feed di linea) U+000A e CR (ritorno del trasporto) U+000D.La gamma C1 è supportata, cioèÈ possibile codificare direttamente i controlli o rappresentarli come NCRS (riferimenti al carattere numerico).

Il modo in cui leggo questo è:

Qualsiasi carattere di controllo nell'intervallo C1 è supportato se li codifichi (utilizzando rappresentazioni base64 o esadecimali) o li rappresenti come NCR.

Nell'intervallo C0 sono supportati solo U+0009, U+000A e U+000D.Nessun altro codice di controllo in quell'intervallo può essere rappresentato.

Se è noto che il documento è XHTML, dovresti semplicemente caricarlo e convalidarlo rispetto allo schema.

Che linguaggio di programmazione usi?Almeno per Java esistono librerie per controllare la codifica di una stringa (o array di byte).Immagino che esistano librerie simili anche per altre lingue.

Ho capito bene la tua domanda:vuoi verificare se i dati inviati da un modulo sono validi e codificati correttamente?

Se sì, perché fare più cose contemporaneamente?Sarebbe molto più semplice separare questi controlli ed eseguirli passo dopo passo, IMHO.

  1. Vuoi verificare che i dati del modulo inviato siano codificati correttamente (in UTF-8, immagino).Come dice l'Arcicancelliere Ridcully, proprio così facile da controllare nella maggior parte delle lingue.
  2. Quindi, se la codifica è corretta, puoi verificare se si tratta di dati del modulo validi.
  3. Quindi, se i dati del modulo sono validi, puoi verificare se i dati contengono ciò che ti aspetti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top