Aspas simples são permitidas em HTML?

146

Eu sou um grande usuário do uso de aspas duplas no PHP para poder interpolar variáveis ​​em vez de concatenar strings. Como resultado, quando gero HTML, costumo usar aspas simples para definir campos de tags. Por exemplo:

$html = "<input type='text' name='address' value='$address'>";

Agora, isso é muito mais legível para mim do que

$html = "<input type=\"text\" name=\"address\" value=\"$address\">";

ou

$html = '<input type="text" name="address" values="' . $address . '">' ;

A partir de breves pesquisas, ouvi pessoas dizendo que aspas simples para campos HTML não são reconhecidas por TODOS os navegadores. Então, eu estou querendo saber o que os navegadores teriam problemas ao reconhecer HTML de aspas simples?

Raças de leveza em órbita
fonte
2
possível duplicação de É melhor usar aspas simples ou duplas para atributos HTML?
Brad Werth

Respostas:

149

Isso é semelhante a Quando as aspas simples em HTML se tornaram tão populares? . Aspas simples em torno dos atributos em HTML são e sempre foram permitidas pela especificação . Não acho que nenhum navegador os entenda.

Greg Hewgill
fonte
13
Uma coisa que preciso mencionar aqui é que alguns clientes HTML (navegadores não necessários) têm problemas compatíveis na citação única. Um exemplo estranho é que, no Hotmail, se você usar <img src='cid:xxx' ... />uma imagem embutida, ela não aparecerá porque o ID do conteúdo foi ignorado. Você precisa usar `<img src =" cid: xxx "... />.
Earth Engine
52

Como observado por PhiLho, embora haja uma crença amplamente difundida de que aspas simples não são permitidas para valores de atributos, essa crença está errada.

O padrão XML permite aspas simples e duplas em torno dos valores dos atributos.

O padrão XHTML não diz nada para mudar isso, mas uma seção relacionada que afirma que os valores dos atributos devem ser citados usa aspas duplas no exemplo, o que provavelmente levou a essa confusão. Este exemplo está apenas indicando que os valores de atributo em XHTML devem atender ao padrão mínimo para valores de atributo em XML, o que significa que devem ser citados (em oposição ao HTML simples que não se importa), mas não o restringe a um único ou aspas duplas.

Obviamente, é sempre possível que você encontre um analisador que não é compatível com os padrões, mas quando isso acontece, todas as apostas estão desativadas. Portanto, é melhor seguir o que a especificação diz. É por isso que temos especificações, afinal.

Adam Bellaire
fonte
2
+1 para o link para o padrão XML. Sei que esse é um tópico antigo, mas, para ser completo, as pessoas devem prestar atenção especial à especificação gramatical do AttValue dentro do padrão. Se você puder ler EBNF (muito semelhante às expressões regulares), verá que ele permite o uso de aspas simples e duplas para delimitar atributos.
Daiscog
7
Mas HTML é baseado em SGML (é XHTML que é baseada em XML), para citar a especificação XML não é muito útil ...
Donal Fellows
A verdadeira confusão é se aspas simples ou duplas em um valor de atributo sempre precisam ser escapadas. Parece que se você usar aspas duplas em torno do valor do atributo, precisará escapar de aspas duplas, mas não de aspas simples. Se, em vez disso, você usar aspas simples em torno do valor do atributo, precisará escapar de aspas simples, mas não de aspas duplas. E acho que esse é o objetivo de permitir também. Se você tiver muitas aspas duplas no seu valor, poderá evitar escapá-las usando aspas simples em todo o valor e vice-versa.
Triynko
O fato é que, se você usar um modo de documento XHTML, terá problemas com o interpretador Javascript, onde ele tenta forçar qualquer HTML criado por Javascript a usar aspas duplas, quebrando atributos com aspas duplas sem escape dentro deles. Encontrei esse problema no Firefox e no IE há vários anos.
precisa saber é o seguinte
16

Ouvi pessoas dizendo que aspas simples para campos HTML não são reconhecidas por TODOS os navegadores

Essa pessoa está errada.

FlySwat
fonte
30
Não necessariamente. Posso criar um navegador em alguns minutos que não reconheça aspas simples para campos HTML. Claro, haverá muito mais que ele não reconhece ...; P
Lightness Races in Orbit
@LightnessRacesinOrbit "Como assim, este navegador não suporta CSS ?!"
BadHorsie 30/07/2015
... ou mais importante, "esse navegador (que não é) é carne morta". : P
ToolmakerSteve
@LightnessRacesinOrbit - mas você tem? Parece que alguém motivado o suficiente para criar um navegador inteiro gastará 5 minutos extras para aceitar aspas simples.
user3413723
7

Não acredite em tudo que você vê na Internet ...
Engraçado, acabei de responder algo semelhante a alguém declarar aspas simples não válidas em XHTML ...

Mmm, eu olho para cima enquanto digito e vejo que Adam N propaga a mesma crença. Se ele puder confirmar sua afirmação, retiro o que escrevi ... AFAIK, XML é agnóstico e aceita os dois tipos de citação. Até tentei e validei sem problemas uma página XHTML com apenas aspas simples.

PhiLho
fonte
4

O único problema são os dados que entram nos campos TEXT INPUT. Considerar

<input value='it's gonna break'/>

Mesmo com:

<input value="i say - "this is gonna be trouble" "/>

Você não pode escapar disso, você tem que usar htmlspecialchars.

inteblio
fonte
2
No entanto, você pode fazer:<input value='it&apos;s gonna break'/>
rink.attendant
4
Penso que o motivo pelo qual temos a opção de usar aspas simples ou duplas é evitar ter que escapar caracteres exatamente nesse cenário. Se você tem apenas aspas duplas em seu valor, coloque-a entre aspas simples para evitar ter que escapar as aspas duplas assim: <input value="it's not gonna break"/>e vice-versa: <input value='i say - "this is not gonna be trouble"'/>.
Triynko
1
@Triynko está certo. Além disso: para o conteúdo , considere não usar "aspas idiotas" em primeiro lugar, mas "citações tipográficas": a barra de Pedro, não a barra de Pedro. # En.wikipedia.org/wiki/Quotation_mark#Quotation_marks_in_English
Frank Nocke
2

Como eu estava procurando informações sobre isso em uma versão muito mais recente da especificação e demorei bastante tempo para encontrá-la, aqui está:

De

HTML 5.3

Redação do Editor, 18 de outubro de 2018

[...]

8.1.2.3 Atributos

Sintaxe de valor de atributo entre aspas simples

O nome do atributo, seguido por zero ou mais caracteres de espaço, seguido por um único caractere U + 003D EQUALS SIGN, seguido por zero ou mais caracteres de espaço, seguido por um único caractere AP + +2727 APOSTROPHE ('), seguido pelo valor do atributo, que, além dos requisitos fornecidos acima para valores de atributo, não deve conter caracteres literais APOSTROPHE U + 0027 (') e, finalmente, seguido por um segundo caractere APOSTROPHE U + 0027 (').

No exemplo a seguir, o atributo type é fornecido com a sintaxe do valor do atributo entre aspas simples:

<input type='checkbox'>

Se um atributo que usa a sintaxe de atributo entre aspas deve ser seguido por outro atributo, deve haver um caractere de espaço separando os dois.

http://w3c.github.io/html/single-page.html#elements-attributes

connexo
fonte
1

Também costumo usar aspas simples em HTML e nunca tive um problema.

UnkwnTech
fonte
1

Eu usei aspas simples em páginas HTML e JavaScripts embutidos nele e funciona bem. Testado no IE9, Chrome e Firefox - parece funcionar bem.

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
        <title>Bethanie Inc. data : geographically linked</title>
        <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script>
        <script src='https://maps.googleapis.com/maps/api/js?v=3.11&sensor=false' type='text/javascript'></script>
        <script type='text/javascript'> 
        // check DOM Ready
        $(document).ready(function() {
            // execute
            (function() {
                /////////////// Addresses ///////////////////
                var locations = new Array();
                var i = 0;
                locations[i++] = 'L,Riversea: Comp Site1 at Riversea,1 Wallace Lane Mosman Park WA 6012'
                locations[i++] = 'L,Wearne: Comp Site2 at Wearne,1 Gibney St Cottesloe WA 6011'
                locations[i++] = 'L,Beachside:Comp Site3 Beachside,629 Two Rocks Rd Yanchep WA 6035'

                /////// Addresses/////////
                var total_locations = i;
                i = 0;
                console.log('About to look up ' + total_locations + ' locations');
                // map options
                var options = {
                    zoom: 10,
                    center: new google.maps.LatLng(-31.982484, 115.789329),//Bethanie  
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    mapTypeControl: true
                };
                // init map
                console.log('Initialise map...');
                var map = new google.maps.Map(document.getElementById('map_canvas'), options);
               // use the Google API to translate addresses to GPS coordinates 
               //(See Limits: https://developers.google.com/maps/documentation/geocoding/#Limits)
                var geocoder = new google.maps.Geocoder();
                if (geocoder) {
                    console.log('Got a new instance of Google Geocoder object');
                    // Call function 'createNextMarker' every second
                    var myVar = window.setInterval(function(){createNextMarker()}, 700);
                    function createNextMarker() {
                        if (i < locations.length) 
                       {
                            var customer = locations[i];
                            var parts = customer.split(','); // split line into parts (fields)
                            var type= parts.splice(0,1);    // type from location line (remove)
                            var name = parts.splice(0,1);    // name from location line(remove)
                            var address =parts.join(',');   // combine remaining parts
                            console.log('Looking up ' + name + ' at address ' + address);
                            geocoder.geocode({ 'address': address }, makeCallback(name, type));
                            i++; // next location in list
                            updateProgressBar(i / total_locations);


                        } else 
                       {
                            console.log('Ready looking up ' + i + ' addresses');
                            window.clearInterval(myVar);
                        }
                    }

                    function makeCallback(name,type) 
                   {
                        var geocodeCallBack = function (results, status) {
                            if (status == google.maps.GeocoderStatus.OK) {
                                var longitude = results[0].geometry.location.lng();
                                var latitude = results[0].geometry.location.lat();
                                console.log('Received result: lat:' + latitude + ' long:' + longitude);
                                var marker = new google.maps.Marker({
                                    position: new google.maps.LatLng(latitude, longitude),
                                    map: map,
                                    title: name + ' : ' + '\r\n' + results[0].formatted_address});// this is display in tool tip/ icon color
                                   if (type=='E')  {marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png')};
rchacko
fonte
-1

Recentemente, tive um problema com a otimização da Pesquisa Google. Se tiver aspas simples, não parece rastrear páginas vinculadas.

Gena Moroz
fonte
1
Isso é apenas em <a href=''>atributos?
AntonChanning
-2

... ou apenas use heredocs. Então você não precisa se preocupar em escapar de nada além disso END.

mcandre
fonte
Eu acredito que você está se referindo à capacidade heredoc em PHP .
DavidRR
Não tenho certeza por que essa resposta foi reduzida, devido ao contexto da pergunta original. Ele não responde diretamente à questão de aspas simples de verso duplo, mas aborda a questão de escape de php que leva o OP a favor de aspas simples em primeiro lugar. No entanto, poderia ser um exemplo de uso.
AntonChanning
-10

As aspas simples são adequadas para HTML, mas elas não tornam XHTML válido, o que pode ser problemático se alguém estiver usando um navegador que suporta apenas XHTML, mas não HTML. Não acredito que esses navegadores existam, embora haja provavelmente alguns User-Agents por aí que exijam XHTML estrito.

Adam Ness
fonte
a pior parte é que as pessoas escrevem páginas HTML, mas as marcam como XHTML porque é 'melhor'. Felizmente, essa moda parece estar caindo.
Javier
4
Não acredito que esta afirmação sobre XHTML seja verdadeira. Tanto "e" são aceitáveis em XML, e o validador do W3C aceita documentos XHTML com atributos únicos citado Talvez isso possa ser uma confusão com XHTML eliminando atributos não cotadas que são legais em HTML.?
Doug McClean
A menos que você sirva sua página como texto / xhtml e não como navegadores de texto / html, ela será renderizada como HTML, portanto as regras HTML serão aplicadas. Independentemente disso, um dos princípios do w3C NÃO É QUEBRA A WEB. Porque funciona agora, provavelmente funcionará amanhã.
Diodeus - James MacFarlane 7/08/08
8
O XHTML requer que as páginas sejam XML bem formadas, e o XML permite aspas duplas ou simples em torno de atributos.
Ned Batchelder
@SoftwareMonkey Na verdade, você precisa application/xhtml+xmlou application/xml.
usar o seguinte código