Estou usando um &
símbolo ' ' com HTML5 e UTF-8 no meu site <title>
. O Google mostra muito bem oe comercial em seus SERPs, assim como todos os navegadores em seus títulos.
http://validator.w3.org está me dando o seguinte:
& não iniciou uma referência de personagem. (e provavelmente deveria ter escapado como
&
.)
Eu realmente preciso fazer &
?
Não estou preocupado com a validação das minhas páginas, mas estou curioso para ouvir a opinião das pessoas sobre isso e se é importante e por que.
validation
html
utf-8
character-encoding
Haroldo
fonte
fonte
Respostas:
Sim. Assim como o erro disse, em HTML, os atributos são #PCDATA, o que significa que são analisados. Isso significa que você pode usar entidades de caracteres nos atributos. O uso
&
por si só está errado e, se não for em navegadores brandos, e o fato de ser HTML e não XHTML, interromperia a análise. Apenas escape como&
tudo ficaria bem.O HTML5 permite deixá-lo sem escape, mas apenas quando os dados a seguir não parecem uma referência de caractere válida. No entanto, é melhor escapar de todas as instâncias desse símbolo do que se preocupar com quais e quais não devem ser.
Mantenha esse ponto em mente; se você não está escapando do & para o & amp;, é ruim o suficiente para os dados que você cria (onde o código pode muito bem ser inválido), também não pode estar escapando dos delimitadores de tags, que é um grande problema para os dados enviados pelo usuário, o que poderia muito bem levar à injeção de HTML e scripts, roubo de cookies e outras explorações.
Por favor, apenas escape do seu código. Isso poupará muitos problemas no futuro.
fonte
Validação à parte, permanece o fato de que a codificação de certos caracteres é importante para um documento HTML, para que ele possa ser renderizado de maneira adequada e segura como uma página da web.
Codificar
&
como&
em todas as circunstâncias, para mim, é uma regra mais fácil de seguir, reduzindo a probabilidade de erros e falhas.Compare o seguinte: qual é mais fácil? o que é mais fácil de fazer ?
Metodologia 1
Metodologia 2
(com um grão de sal, por favor;))
volt & amp
> Nesse caso, não se preocupe em codificá-lo.
amp&volt
nesse caso, não se preocupe em codificá-lo.
volt&
> Codifique.
??
fonte
amp&volt
é ambíguo:&volt
agora é uma referência de entidade ou não?amp&volt
é um E comercial ambíguo (conforme a definição na especificação HTML). Consulte mathiasbynens.be/notes/ambiguous-ampersands e mothereff.in/ampersands#amp%26volt .As regras HTML5 são diferentes do HTML4. Não é necessário no HTML5, a menos que o e comercial pareça iniciar um nome de parâmetro. "& copy = 2" ainda é um problema, por exemplo, uma vez que o & copy; é o símbolo de direitos autorais.
No entanto, parece-me que é um trabalho mais difícil decidir codificar ou não codificar, dependendo do texto a seguir. Portanto, o caminho mais fácil é provavelmente codificar o tempo todo.
fonte
©=2
não é um problema tão grande quanto você imagina. Em valores de atributo (por exemplo, ohref
atributo), o©
item não será considerado uma referência de caractere©
. Fora de um valor de atributo, seria.Eu acho que isso se transformou em mais uma questão de "por que seguir as especificações quando o navegador não se importa". Aqui está a minha resposta generalizada:
Os padrões não são "presentes". Eles são uma coisa "futura". Se nós, como desenvolvedores, seguirmos os padrões da Web, é mais provável que os fornecedores de navegadores os implementem corretamente, e nos aproximaremos de uma Web completamente interoperável, onde hacks CSS, detecção de recursos e detecção de navegador não são necessários. Onde não precisamos descobrir por que nossos layouts quebram em um navegador específico ou como contornar isso.
Especificamente, se o HTML5 não exigir o uso do & amp; em sua situação específica e usando um doctype HTML5 (e também esperando que seus usuários usem navegadores compatíveis com HTML5), não há motivo para fazê-lo.
fonte
Bem, se vier da entrada do usuário, então absolutamente sim, por razões óbvias. Pense se este site não o fizesse: o título dessa pergunta apareceria como eu realmente preciso codificar '&' como '&'?
Se é apenas algo assim
echo '<title>Dolce & Gabbana</title>';
, estritamente falando, você não precisa. Seria melhor, mas se você não fizer isso, nenhum usuário perceberá a diferença.fonte
Você poderia nos mostrar o que
title
realmente é? Quando eu enviopara http://validator.w3.org/ - solicitando explicitamente que ele use o modo experimental HTML 5 - não há queixas sobre o
&
...fonte
<title>Dolce & Gabbana</title>
e<p>Dolce & Gabbana</p>
são HTML 2.0 válidos.No HTML a
&
marca o início de uma referência, seja de uma referência de caractere ou de uma referência de entidade . A partir desse ponto, o analisador espera uma#
referência de caractere ou um nome de entidade que indica uma referência de entidade, ambos seguidos por a;
. Esse é o comportamento normal.Mas se o nome de referência ou apenas a abertura de referência
&
é seguido por um espaço em branco ou outros delimitadores como"
,'
,<
,>
,&
, o fim;
e até mesmo uma referência para representar uma planície&
pode ser omitido:Somente nesses casos, o final
;
ou até a própria referência podem ser omitidos (pelo menos no HTML 4). Eu acho que o HTML 5 requer o final;
.Mas a especificação recomenda sempre usar uma referência como a referência de caractere
&
ou a referência de entidade&
para evitar confusão:fonte
Se o usuário o transmitir para você ou ele acabar em um URL, você precisará escapar dele.
Se ele aparecer em texto estático em uma página? Todos os navegadores acertarão este caminho de qualquer maneira, não se preocupe muito, pois ele funcionará.
fonte
Atualização (março de 2020): o validador do W3C não se queixa mais de escape de URLs.
Eu estava verificando por que o URL da imagem precisa escapar e, portanto, tentei em https://validator.w3.org . A explicação é bem legal. Ele destaca que mesmo os URLs precisam ser escapados. [PS: Eu acho que ele não escapou quando consumido desde a necessidade da URL
&
. Alguém pode esclarecer?]fonte
&
inicia uma referência de entidade. Após a leitura&qux
, o analisador não encontra ponto e vírgula final (;
), mas executa um sinal de igual (=
), que não pode fazer parte do nome da entidade. Isso deve ser um erro de análise, se o analisador tentar ser realmente rigoroso (de acordo com o HTML 4). No HTML 5, a análise de entidades é geralmente mais relaxada.;
como um separador nas seqüências de caracteres de consulta (quando você controla o link) por esse motivo.Sim, você deve tentar fornecer código válido, se possível.
A maioria dos navegadores corrige esse erro silenciosamente, mas há um problema em confiar na manipulação de erros nos navegadores. Não existe um padrão para lidar com códigos incorretos; portanto, cabe a cada fornecedor de navegador tentar descobrir o que fazer com cada erro, e os resultados podem variar.
Alguns exemplos em que os navegadores provavelmente reagirão de maneira diferente são se você colocar elementos dentro de uma tabela, mas fora das células da tabela, ou se aninhar links dentro um do outro.
Para o seu exemplo específico, não é provável que cause problemas, mas a correção de erros no navegador pode, por exemplo, fazer com que o navegador mude do modo compatível com os padrões para o modo quirks, o que pode fazer com que seu layout seja completamente quebrado.
Portanto, você deve corrigir erros como este no código, caso contrário, para manter a lista de erros no validador curta, para detectar problemas mais sérios.
fonte
Há alguns anos, recebemos um relatório de que um de nossos aplicativos da web não estava sendo exibido corretamente no Firefox. Verificou-se que a página continha uma tag que parecia
Quando confrontado com um atributo de estilo repetido, o IE combina os dois estilos, enquanto o Firefox usa apenas um deles, daí o comportamento diferente. Eu mudei a tag para
e com certeza, corrigiu o problema! A moral da história é que os navegadores têm um tratamento mais consistente do HTML válido do que do HTML inválido. Então, corrija sua maldita marcação! (Ou use o HTML Tidy para corrigi-lo.)
fonte
se
&
for usado em html , você deve escapar deleSe
&
for usado em strings javascript, por exemplo, umalert('This & that');
ou document.href, você não precisará usá-lo.Se você estiver usando document.write, deverá usá-lo, por exemplo
document.write(<p>this & that</p>)
fonte
document.write
Deveria ser evitado. Consulte a caixa de aviso em w3.org/html/wg/drafts/html/master/dom.html#document.write%28%29document.write()
. Mas o ponto principal de Alex é escrever sobre o documento a partir de suportes de script. 1Depende da probabilidade de um ponto-e-vírgula terminar próximo ao seu
&
, fazendo com que ele exiba algo bem diferente.Por exemplo, ao lidar com informações de usuários (por exemplo, se você incluir o assunto de uma postagem no fórum fornecida pelo usuário em suas tags de título), nunca saberá onde eles podem estar colocando ponto-e-vírgula aleatório e poderá exibir entidades estranhas aleatoriamente. Portanto, sempre escape nessa situação.
Para seu próprio html estático, com certeza, você pode ignorá-lo, mas é tão trivial incluir uma fuga adequada, que não há boas razões para evitá-lo.
fonte
Se você está realmente falando sobre o texto estático
armazenado em algum arquivo no disco rígido e servido diretamente por um servidor, então sim: provavelmente não precisa ser escapado.
No entanto, como atualmente há muito pouco conteúdo HTML totalmente estático, adicionarei o seguinte aviso de isenção de responsabilidade que pressupõe que o conteúdo HTML seja gerado a partir de outra fonte (conteúdo do banco de dados, entrada do usuário, resultado da chamada de serviço da Web, resultado da API herdada). ..):
Se você não escapar de um simples
&
, então as chances são que você também não escapar de uma&
ou de um
ou<b>
ou<script src="http://attacker.com/evil.js">
ou qualquer outro texto inválido. Isso significa que, na melhor das hipóteses, você está exibindo seu conteúdo incorretamente e é mais provável que seja suspeito de ataques XSS .Em outras palavras: quando você já está verificando e escapando dos outros casos mais problemáticos, quase não há razão para deixar o não-totalmente-quebrado-mas-ainda-um-peixe-autônomo- e sem escape.
fonte
não tenho certeza se isso é útil para alguém ... Eu estava lutando contra isso por um tempo ... aqui está um regex glorioso que você pode usar para corrigir todos os seus links, javascript, conteúdo. Eu tive que lidar com uma tonelada de conteúdo herdado que ninguém queria corrigir.
Adicione isso à sua substituição Render na sua página mestre ou controle:
Por favor, não me chame por colocar isso no lugar errado:
fonte
O link tem um bom exemplo de quando e por que você pode precisar fugir
&
para&
https://jsfiddle.net/vh2h7usk/1/
Curiosamente, eu tive que escapar do personagem para representá-lo corretamente em minha resposta aqui. Se eu usar a opção de amostra de código embutida (no painel de respostas), basta digitar
&
e ela aparece como deveria. Mas se eu fosse usar manualmente o<code></code>
elemento, teria que escapar para representá-lo corretamente :)fonte