Разрешены ли одинарные кавычки в HTML? - PullRequest
135 голосов
/ 07 ноября 2008

Я большой пользователь, использующий двойные кавычки в PHP, чтобы я мог интерполировать переменные, а не объединять строки. В результате, когда я генерирую HTML, я часто использую одинарные кавычки для установки полей тегов. Например:

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

Теперь это гораздо более читабельно для меня, чем либо

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

или

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

Из коротких поисков я слышал, как люди говорили, что одинарные кавычки для полей HTML не распознаются КАЖДЫМ браузером. Поэтому мне интересно, какие браузеры будут иметь проблемы с распознаванием HTML в одинарных кавычках?

Ответы [ 11 ]

138 голосов
/ 07 ноября 2008

Это похоже на Когда одинарные кавычки в HTML стали настолько популярными? . Одинарные кавычки вокруг атрибутов в HTML разрешены и всегда разрешены спецификацией . Я не думаю, что какой-либо браузер не поймет их.

46 голосов
/ 07 ноября 2008

Как отмечает PhiLho, хотя существует широко распространенное мнение, что одинарные кавычки недопустимы для значений атрибутов, это убеждение неверно.

Стандарт XML допускает как одинарные, так и двойные кавычки вокруг значений атрибутов.

Стандарт XHTML ничего не говорит об этом, но в соответствующем разделе, в котором говорится, что значения атрибута должны быть заключены в кавычки использует двойные кавычки в примере, что, вероятно, привело к этой путанице. В этом примере просто указывается, что значения атрибутов в XHTML должны соответствовать минимальному стандарту для значений атрибутов в XML, что означает, что они должны заключаться в кавычки (в отличие от обычного HTML, который не заботится), но не ограничивает вас ни одним, ни двойные кавычки.

Конечно, всегда возможно, что вы столкнетесь с синтаксическим анализатором, который не соответствует стандартам, но когда это произойдет, все ставки в любом случае отключены. Так что лучше просто придерживаться того, что говорится в спецификации. Вот почему у нас есть спецификации, в конце концов.

14 голосов
/ 07 ноября 2008

Я слышал, как люди говорили, что одинарные кавычки для полей HTML не распознаются КАЖДЫМ браузером

Этот человек не прав.

5 голосов
/ 07 ноября 2008

Не верь всему, что видишь в Интернете ...
Как ни странно, я только что ответил на что-то похожее на то, что кто-то заявил, что одинарные кавычки недействительны в XHTML ...

Ммм, я смотрю выше, печатая, и вижу, что Адам Н распространяет ту же веру. Если он сможет подтвердить свое утверждение, я отрекусь от того, что я написал ... AFAIK, XML является агностиком и принимает оба вида цитат. Я даже без проблем попробовал и проверил страницу XHTML с одиночными кавычками.

4 голосов
/ 15 марта 2012

Единственная проблема - данные поступают в поля ввода текста. Рассмотрим

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

То же самое с:

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

Вы не можете избежать этого, вы должны использовать htmlspecialchars.

2 голосов
/ 07 ноября 2008

Я также использую одинарные кавычки в HTML, и у меня никогда не возникало проблем.

1 голос
/ 29 апреля 2019

Поскольку я искал информацию об этом в гораздо более новой версии спецификации , и мне потребовалось довольно много времени, чтобы найти ее, вот она:

С

HTML 5,3

Редакция, 18 октября 2018

[...]

8.1.2.3. Свойства

Синтаксис значения атрибута в одинарных кавычках

Имя атрибута, за которым следуют ноль или более пробелов, за которыми следует один символ U + 003D EQUALS SIGN, за которым следуют ноль или более пробелов, за которыми следует один символ U + 0027 APOSTROPHE ('), за которым следует значение атрибута, которое, в дополнение к приведенным выше требованиям к значениям атрибута, не должно содержать никаких литеральных символов APOSTROPHE U + 0027 ('), и, наконец, за ним следует второй единственный символ APOSTROPHE U + 0027 (').

В следующем примере атрибут типа задается с синтаксисом значения атрибута в одинарных кавычках:

<input type='checkbox'>

Если за атрибутом, использующим синтаксис атрибута в одинарных кавычках, должен следовать другой атрибут, то между ними должен быть символ пробела.

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

1 голос
/ 19 февраля 2014

Я использовал одинарные кавычки на HTML-страницах и встроил в него JavaScripts, и он отлично работает. Протестировано в IE9, Chrome и Firefox - кажется, работает нормально.

<!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')};
0 голосов
/ 18 марта 2015

Недавно у меня возникла проблема с поисковой оптимизацией Google. Если есть одинарные кавычки, он не сканирует связанные страницы.

0 голосов
/ 24 апреля 2013

... или просто используйте heredocs. Тогда вам не нужно беспокоиться о побеге, кроме END.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...