Para que & amp é usado

107

Existe alguma diferença no comportamento do URL abaixo.

Não sei porque &é inserido o, faz alguma diferença?

www.testurl.com/test?param1=test&current=true

versus

www.testurl.com/test?param1=test&current=true
céu azul
fonte
1
Relacionado: Eu realmente preciso codificar como amplificador?
Charles Sprayberry
1
Você pode dar um contexto? É uma ação de formulário? Apenas exibido em uma página?
jprofitt
@ user470184 Não fiz votos negativos, mas considerei. Já existe uma tonelada de informações no SO sobre esse assunto.
Charles Sprayberry
O "comportamento genérico" ainda é muito vago. Você está se perguntando sobre algo como <p>www.testurl.com/test?param1=test&amp;current=true</p>ou <a href="www.testurl.com/test?param1=test&amp;current=true">linky</a>?
jprofitt
@ jprofitt <a href="www.testurl.com/test?param1=test&current=true"> linky </a>
blue-sky

Respostas:

126

& é HTML para "Início de uma referência de caractere".

&amp; é a referência de caractere para "Um e comercial".

&current; não é uma referência de caractere padrão e, portanto, é um erro (os navegadores podem tentar realizar a recuperação de erros, mas você não deve depender disso).

Se você usou uma referência de caractere para um caractere real (por exemplo &trade;), então (™) apareceria na URL em vez da string desejada.

(Observe que dependendo da versão de HTML que você usa, pode ser necessário terminar uma referência de caractere com um ;, que é o motivo pelo qual &trade=será tratado como ™. O HTML 4 permite que seja omitido se o próximo caractere for um caractere não-word ( como =), mas alguns navegadores (Hello Internet Explorer) têm problemas com isso).

Quentin
fonte
5

Minha fonte: http://htmlhelp.com/tools/validator/problems.html#amp

Outro erro comum ocorre ao incluir um URL que contém um E comercial ("&"):

Isto é inválido:

a href = "foo.cgi? capítulo = 1 & section = 2 & copy = 3 & lang = en"

Explicação:

Este exemplo gera um erro para "seção de entidade desconhecida" porque "&"é considerado o início de uma referência de entidade. Os navegadores geralmente se recuperam com segurança desse tipo de erro, mas problemas reais ocorrem em alguns casos. Neste exemplo, muitos navegadores convertem corretamente & copy = 3 em © = 3, o que pode fazer com que o link falhe. Como ⟨é a entidade HTML para o colchete angular esquerdo, alguns navegadores também convertem & lang = en em 〈= en. E um navegador antigo até encontra a entidade §, convertendo & section = 2 em §ion = 2.

Portanto, o objetivo aqui é evitar problemas ao tentar validar seu site. Portanto, você deve substituir seus "e" comerciais por &amp;ao escrever um URL em sua marcação.

Observe que substituir &por &amp; só é feito ao escrever a URL em HTML, onde "&"é um caractere especial (junto com "<" e ">"). Ao escrever a mesma URL em uma mensagem de e-mail de texto simples ou na barra de localização do seu navegador, você usaria "&"ou não "&amp;". Com HTML, o navegador é traduzido "&amp;"para de "&"forma que o servidor Web veja apenas, "&" e não "&amp;"na string de consulta da solicitação.

Espero que isto ajude : )

Jim
fonte
0

Esse é um ótimo exemplo. Quando &currenté analisado em um nó de texto para o qual é convertido ¤t. Quando analisado em um valor de atributo , ele é analisado como &current.

Se você quiser &currentum nó de texto, deve escrever &amp;currentem sua marcação.

Os detalhes sangrentos estão aqui: http://dev.w3.org/html5/spec/tokenization.html#consume-a-character-reference

Alohci
fonte
-2

se você estiver fazendo uma seqüência de caracteres. faço:

let linkGoogle = 'https://www.google.com/maps/dir/?api=1'; 
let origin = '&origin=' + locations[0][1] + ',' + locations[0][2];


aNav.href = linkGoogle + origin;
Urbanek Krzysztof
fonte
1
A questão é &ampem HTML, não &em URLs.
Quentin