Pergunta

Estou tring para criar unidade de validação de formulário que, além de testes de verificações "regulares" codificar também.

De acordo com este artigo http://www.w3.org / / perguntas / internacionais qa-formas-utf-8 o caracteres permitidos são CR, LF e TAB na gama de 0-31, o DEL = 127 em não autorizados.

Por outro lado, há caracteres de controle na faixa 0x80-0xA0. Em diferentes fontes Eu já tinha visto que eles são permitidos e que não. Também eu tinha visto que isso é diferente para XHTML, HTML e XML.

Alguns artigos dissera que FF é permitido também?

Alguém pode fornecer uma boa resposta com fontes que pode ser dado e que não é?

EDIT: Mesmo lá http://www.w3.org/International/questions / qa-controls alguma ambiguidade

A gama C1 é suportado

mas a tabela mostra que eles são UTF-8 validações ilegais e anteriores mostrados permite-los?

Foi útil?

Solução

Os caracteres Unicode nesses intervalos são válidos em HTML 4.01:

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

Em XHTML 1.0 ... é claro. Consulte http://cmsmcq.com/2007/C1.xml#o127626258

Outras dicas

Eu acho que você está olhando para isso da maneira errada ao redor. Os recursos que você ligar especificar o que codificado valores são válidos em (X) HTML , mas parece que você deseja validar a "resposta" de um formulário web - como, os valores dos vários controles de formulário , como back passado para o servidor. Nesse caso, você não deve estar a olhar para o que é válida em (X) HTML, mas o que é válido no application / x-www-form-urlencoded , e possivelmente também multipart / form -data , tipos MIME. Os padrões HTML 4.01 para elementos <FORM> afirma claramente que para application / x-www-form-urlencoded "caracteres não alfanuméricos são substituídos por '% HH'":

Este é o tipo de conteúdo padrão. Formulários enviados com este tipo de conteúdo deve ser codificado como segue:

  1. nomes e valores de controle são escapou. caracteres de espaço são substituídos por '+', e os personagens, então reservados são escapados, como descrito no [RFC1738] , secção 2.2: caracteres não alfanuméricos são substituídos por '% HH', um sinal de porcentagem e dois dígitos hexadecimais que representam o código ASCII do caractere. Quebras de linha são representadas como pares "CR LF" (ou seja, `% 0D% 0A ').
  2. Os nomes de controlo / valores são listados na ordem em que aparecem no documento. O nome é separado do valor por '=' e pares nome / valor são separados um do outro por '&'.

Quanto ao que codificação de caracteres está contido, (ou seja, se %A0 é um espaço não-quebra ou um erro), que é negociado pela accept-charset atributo no seu elemento <FORM> ea resposta de (bem, realmente um GET ou pedido POST) cabeçalho Content-Type.

A Lei de Postel: Seja conservador no que você faz; ser liberal no que você aceitar os outros.

Se você está gerando documentos para que outros possam ler, você deve evitar / escapar todos os caracteres de controle, mesmo se eles estão tecnicamente legal. E se você está analisando documentos, você deve se esforçar para aceitar todos os caracteres de controle, mesmo se eles são tecnicamente ilegal.

Em primeiro lugar qualquer octeto é válido. A expressão regular mencionado para UTF 8-seqüências apenas omite alguns deles como eles são bastante incomum na prática a ser inserido por um usuário. Mas isso não significa que eles são inválidos. Eles simplesmente não são esperados para ocorrer.

O primeiro link que você menciona não tem nada a ver com a validação dos caracteres permitidos em XHTML ... o exemplo em que a ligação é simplesmente mostrando um padrão comum / genérico para detectar se ou não os dados brutos está em codificação UTF-8 ou não.

Esta é uma citação do segundo link:

HTML, XHTML e XML 1.0 não suportam a faixa de C0, exceto para HT (Horizontal Tabulação) U + 0009, LF (Linha de alimentação) L + 000A, e CR (Carruagem Return) U + 000D. A gama é C1 suportado, ou seja, você pode codificar o controle direto ou representá-los como NCRs (Numérico referências de caracteres).

A maneira que eu leia isto é:

Qualquer caractere de controle na faixa de C1 é suportado se você codificá-los (usando base64 ou representações Hex) ou representá-los como NCRs.

Apenas U + 0009, U + 000A, e U + 000D são suportados na faixa C0. Nenhum outro código de controle nesse intervalo pode ser representado.

Se o documento é conhecido por ser XHTML, então você deve apenas carregá-lo e validá-lo contra o esquema.

O linguagem de programação que você usa? Pelo menos para Java existem bibliotecas para verificar a codificação de uma corda (ou byte-matriz). Eu acho que as bibliotecas semelhantes existiria para outros idiomas também.

Do que eu entendi sua pergunta: você deseja verificar se os dados apresentados por um formulário é válido, e devidamente codificadas

Se sim, por fazer várias coisas ao mesmo tempo? Seria muito mais fácil para separar esses controlos, e realizá-las passo a passo, IMHO.

  1. Você deseja verificar se os dados do formulário submetido está corretamente codificado (em UTF-8, suponho). Como diz Archchancellor Ridcully, isso é fácil de verificar na maioria dos idiomas.
  2. Em seguida, se a codificação está correta, você pode verificar se é dados do formulário válido.
  3. Então, se os dados do formulário é válido, você pode verificar se os dados contém o que você espera.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top