Quais caracteres devem ser escapados nos documentos XML ou onde posso encontrar essa lista?
Quais caracteres devem ser escapados nos documentos XML ou onde posso encontrar essa lista?
Respostas:
Se você usar uma classe ou biblioteca apropriada, eles farão o escape para você. Muitos problemas de XML são causados por concatenação de cadeias.
Existem apenas cinco:
" "
' '
< <
> >
& &
O escape de caracteres depende de onde o caractere especial é usado.
Os exemplos podem ser validados no Serviço de validação de marcação do W3C .
A maneira segura é escapar dos cinco caracteres do texto. No entanto, os três personagens "
, '
e >
não precisa ser escapado no texto:
<?xml version="1.0"?>
<valid>"'></valid>
A maneira segura é escapar dos cinco caracteres nos atributos. No entanto, o >
personagem não precisa ser escapado em atributos:
<?xml version="1.0"?>
<valid attribute=">"/>
O '
caractere não precisa ser escapado em atributos se as aspas forem "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Da mesma forma, os "
atributos não precisam ser escapados se as aspas forem '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Todos os cinco caracteres especiais não devem ser escapados nos comentários:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Todos os cinco caracteres especiais não devem ser escapados nas seções CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Todos os cinco caracteres especiais não devem ser escapados nas instruções de processamento XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
O HTML possui seu próprio conjunto de códigos de escape, que cobrem muito mais caracteres.
"
será alterado para&quot;
Talvez isso ajude:
Lista de referências de entidade de caracteres XML e HTML :
Nos documentos SGML, HTML e XML, as construções lógicas conhecidas como dados de caracteres e valores de atributos consistem em sequências de caracteres, nas quais cada caractere pode se manifestar diretamente (representando a si mesmo) ou pode ser representado por uma série de caracteres chamados de referência de caracteres, dos quais existem dois tipos: uma referência numérica de caracteres e uma referência de entidade de caracteres. Este artigo lista as referências de entidade de caracteres que são válidas em documentos HTML e XML.
Esse artigo lista as cinco entidades XML predefinidas a seguir:
quot "
amp &
apos '
lt <
gt >
De acordo com as especificações do World Wide Web Consortium (w3C), existem 5 caracteres que não devem aparecer em sua forma literal em um documento XML , exceto quando usados como delimitadores de marcação ou em um comentário, uma instrução de processamento ou uma seção CDATA . Nos demais casos, esses caracteres devem ser substituídos usando a entidade correspondente ou a referência numérica, de acordo com a tabela a seguir:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Observe que as entidades acima mencionadas também podem ser usadas em HTML, com exceção de & apos; , que foi introduzido no XHTML 1.0 e não está declarado no HTML 4. Por esse motivo, e para garantir a compatibilidade retroativa, a especificação XHTML recomenda o uso do & # 39; em vez de.
>
deve ser escapado se seguir o ]]
conteúdo, a menos que se destine a fazer parte do ]]>
delimitador que indica o final de uma seção CDATA.
O escape de caracteres é diferente para tags e atributos.
Para tags:
< <
> > (only for compatibility, read below)
& &
Para atributos:
" "
' '
De dados e marcação de caracteres :
O caractere e comercial (&) e o colchete angular esquerdo (<) não devem aparecer em sua forma literal, exceto quando usados como delimitadores de marcação, ou dentro de um comentário, uma instrução de processamento ou uma seção CDATA. Se forem necessários em outro lugar, eles devem ser escapados usando referências de caracteres numéricos ou as cadeias "& amp;" e "& lt;" respectivamente. O colchete de ângulo reto (>) pode ser representado usando a string "& gt;" e, para compatibilidade, deve ser escapado usando "& gt;" ou uma referência de caractere quando aparecer na string "]]>" no conteúdo, quando essa sequência não está marcando o final de uma seção CDATA.
Para permitir que os valores dos atributos contenham aspas simples e duplas, o caractere de apóstrofo ou aspas simples (') pode ser representado como "&"; e o caractere de aspas duplas (") como" & quot; "
Resposta nova e simplificada a uma pergunta antiga e comum ...
Sempre (90% importante lembrar)
Valores de Atributos (9% importantes para lembrar)
attr="
'
Aspas simples '
são válidas entre aspas duplas."
attr='
"
Aspas duplas "
são válidas entre aspas simples.'
"
como "
e '
como '
de outro modo.Comentários , CDATA e Instruções de Processamento (0,9% é importante lembrar)
<!--
Nos comentários, -->
nada precisa ser escapado, mas nenhuma --
string é permitida.<![CDATA[
No CDATA, ]]>
nada precisa ser escapado, mas nenhuma ]]>
string é permitida.<?PITarget
Dentro dos PIs, ?>
nada precisa ser escapado, mas nenhuma ?>
string é permitida.Esoterica (0,1% importante lembrar)
]]>
como a ]]>
menos que ]]>
esteja terminando uma seção CDATA. ]]>
deve ser escapada como ]]>
, mesmo quando não estiver em uma seção CDATA. A maneira mais fácil de conseguir isso pode ser sempre escapar >
como >
.
]]>
mas optei por relegá-la à esotérica, em vez de sugerir que >
sempre escape (o que não é necessário, como você sabe). Meu objetivo aqui é tornar as regras de escape do XML facilmente lembradas e 100% precisas .
AttValue
citada na minha resposta por meio de um link em 2. Valores dos Atributos .
Além dos cinco caracteres comumente conhecidos [<,>, &, "e '], eu também escaparia do caractere de tabulação vertical (0x0B). Ele é válido UTF-8, mas não é válido XML 1.0 e até muitas bibliotecas (incluindo a biblioteca altamente portátil (ANSI C) libxml2 ) perde e gera XML inválido silenciosamente.
Abreviado de: XML, Escapando
Existem cinco entidades predefinidas:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Todos os caracteres Unicode permitidos podem ser representados com uma referência numérica." Por exemplo:
中
A maioria dos caracteres de controle e outros intervalos Unicode são especificamente excluídos, o que significa (eu acho) que eles não podem ocorrer como escapados ou diretos:
Depende do contexto. Para o conteúdo, são < e & , e ]]> (embora uma sequência de três em vez de um caractere).
Para valores de atributo, são < , & , " e ' .
Para CDATA, é ]]> .
Somente <
e &
devem ser escapados para que sejam tratados dados de caracteres e não marcação:
<company>AT&T</company>