Чи дозволені окремі лапки в HTML?


146

Я великий користувач часу використовую подвійні лапки в 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 з однією цитатою?


Відповіді:


149

Це схоже на Коли одиночні лапки в HTML стали настільки популярними? . Одиничні лапки навколо атрибутів у HTML є та завжди були дозволені специфікацією . Я не думаю, що жоден браузер їх не зрозумів.


13
Одне, що мені потрібно тут зазначити, - це те, що деякі клієнти HTML (не потрібні браузери) мають проблеми з одночасним котируванням. Один дивний приклад - у Hotmail, якщо ви <img src='cid:xxx' ... />показуєте вбудоване зображення, воно взагалі не з’явиться, оскільки ідентифікатор вмісту був проігнорований. Ви повинні використовувати `<img src =" cid: xxx "... /> замість цього.
Земляний двигун

52

Як зазначає PhiLho, хоча існує широко поширена думка, що одиничні лапки не допускаються для значень атрибутів, ця віра неправильна.

Стандарт XML дозволяє однозначні та подвійні лапки навколо значень атрибутів.

Стандарт XHTML не говорить нічого, щоб змінити це, але пов'язаний розділ, в якому зазначено, що значення атрибутів повинні бути цитовані використовує у прикладі подвійні лапки, що, ймовірно, призвело до цієї плутанини. Цей приклад лише вказує на те, що значення атрибутів у XHTML повинні відповідати мінімальному стандарту для значень атрибутів у XML, а це означає, що вони повинні бути цитованими (на відміну від звичайного HTML, який не хвилює), але не обмежує вас жодним одиничним чи подвійні цитати.

Звичайно, завжди можливо, що ви зіткнетеся з аналізатором, який не відповідає стандартам, але коли це станеться, всі ставки все одно знімаються. Тому краще просто дотримуватися того, що говорить специфікація. Тому ми маємо технічні характеристики.


2
+1 для посилання на стандарт XML Я знаю, що це стара тема, але для повноти людей слід звернути особливу увагу на специфікацію граматики AttValue в рамках стандарту. Якщо ви можете прочитати EBNF (дуже схоже на регулярні вирази), ви побачите, що він дозволяє використовувати як окремі, так і подвійні лапки для розмежування атрибутів.
дайског

7
Але HTML заснований на SGML (це XHTML, який базується на XML), тому цитування специфікацій XML не дуже корисно ...
Donal Fellows

Справжня плутанина - чи завжди потрібно уникати одиничних чи подвійних лапок у значенні атрибута. Здається, що якщо ви використовуєте подвійні лапки навколо значення атрибута, вам доведеться уникати подвійних лапок, але не одиничних лапок. Якщо замість цього ви використовуєте одиничні лапки навколо значення атрибута, вам доведеться уникати одинарних лапок, але не подвійних. І я думаю, що в цьому і полягає вся суть дозволу. Якщо у вас багато подвійних лапок, ви можете уникнути їх уникнення, використовуючи одинарні лапки навколо всього значення, і навпаки.
Трайнко

Справа в тому, що якщо ви використовуєте режим документа XHTML, ви зіткнетеся з проблемами інтерпретатора Javascript, коли він намагається змусити будь-який створений Javascript HTML використовувати подвійні лапки, порушуючи атрибути з недиспецифікованими подвійними лапками всередині них. Я зіткнувся з цією проблемою як у Firefox, так і в IE кілька років тому.
користувач2867288

16

Я чув, як люди говорять, що ОДНІ ВІДКРИТИЙ браузер не розпізнає єдині лапки для полів HTML

Ця людина помиляється.


30
Не обов'язково. Я можу створити браузер за кілька хвилин, який не розпізнає одиничні лапки для полів HTML. Звичайно, буде набагато більше того, що він не визнає ...; P
Гонки легкості в орбіті

@LightnessRacesinOrbit "Що ти означає, що цей браузер не підтримує CSS ?!"
BadHorsie

... або що ще важливіше, "той браузер (якого немає) - це мертве м'ясо". : P
ToolmakerSteve

@LightnessRacesinOrbit - але у вас є? Здається, що хтось достатньо вмотивований, щоб весь браузер збирався вкласти додаткові 5 хвилин, щоб він міг приймати єдині цитати.
користувач3413723

7

Не вірте всьому, що ви бачите в Інтернеті ...
дивно, я просто відповів на щось подібне до того, що хтось заявив, що єдині цитати не відповідають дійсності в XHTML ...

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


4

Єдина проблема - це дані, що надходять у поля TEXT INPUT. Розглянемо

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

Те саме:

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

Ти не можеш уникнути цього, треба використовувати htmlspecialchars.


2
Однак ви можете:<input value='it&apos;s gonna break'/>
rink.attendant.6

4
Я думаю, що у нас є можливість використовувати одинарні або подвійні лапки - уникати необхідності втечі символів саме в цьому сценарії. Якщо у вас є тільки подвійні лапки в вашому значенні, оточують його в одинарних лапках , щоб уникнути того , щоб уникнути подвійних лапок подобаються так: <input value="it's not gonna break"/>і навпаки: <input value='i say - "this is not gonna be trouble"'/>.
Трайнко

1
@Triynko має рацію. Крім того: Для змісту розглядайте не використання "німих цитат" в першу чергу, а "типографічні цитати": Пітерська смуга, а не Пітерська смуга. ☞ en.wikipedia.org/wiki/Quotation_mark#Quotation_marks_in_English
Франк Нокк

2

Оскільки я шукав, щоб знайти інформацію про це в набагато більш новій версії специфікації, і мені знадобилося досить багато часу, щоб знайти її, ось вона:

З

HTML 5.3

Проект редакції, 18 жовтня 2018 року

[...]

8.1.2.3. Атрибути

Одноцитований синтаксис значення атрибута

Ім'я атрибута, за яким нульові або більше символів пробілу, а потім один символ U + 003D EQUALS SIGN, за ним нульові або більше символів пробілу, а потім один символ U + 0027 APOSTROPHE ('), а потім значення атрибута, які, окрім вимог, наведених вище до значень атрибутів, не повинні містити жодних буквальних символів APOSTROPHE U + 0027 (') і, нарешті, супроводжуватись другим єдиним символом APOSTROPHE U + 0027 (').

У наступному прикладі атрибут type задається синтаксисом значення одноцитованого атрибута:

<input type='checkbox'>

Якщо атрибуту, що використовує синтаксис одноцитованого атрибута, слід дотримуватися інший атрибут, тоді повинен бути пробільний символ, що розділяє два.

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


1

Я також схильний використовувати одинарні лапки в HTML, і я ніколи не відчував проблем.


1

Я використовував поодинокі лапки на сторінках 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')};

-1

Нещодавно у мене виникла проблема з оптимізацією пошуку Google. Якщо є одна цитата, схоже, вона не сканує пов’язані сторінки.


1
Це лише в <a href=''>атрибутах?
AntonChanning

-2

... або просто використовувати гередоки. Тоді вам не потрібно турбуватися про те, щоб уникнути нічого, окрім END.


Я вважаю, ви посилаєтесь на здатність гередока в PHP .
DavidRR

Не впевнений, чому ця відповідь спростована з огляду на контекст оригінального питання. Це не відповідає безпосередньо на питання з подвійними віршами з одинарними цитатами, але все ж стосується проблеми, що випливає з php, що призводить до того, що ОП в першу чергу надає перевагу окремим цитатам Однак це можна зробити з прикладом використання.
AntonChanning

-10

Одиночні котирування відмінно підходять для HTML, але вони не роблять дійсних XHTML, що може бути проблематично, якщо хтось використовував браузер, який підтримував лише XHTML, але не HTML. Я не вірю, що такі браузери існують, хоча там, мабуть, є деякі Користувацькі агенти, які вимагають суворого XHTML.


гірша частина - це люди, які пишуть HTML-сторінки, але позначають їх як XHTML, оскільки це "краще". на щастя, ця привид, здається, знижується.
Хав'єр

4
Я не вірю, що це твердження про XHTML є правдивим. І ", і" є прийнятними в XML, і валідатор W3C приймає документи XHTML з одноцитованими атрибутами. Можливо, це може бути плутанина з XHTML, усуваючи атрибути, які не котируються, які є законними в HTML?
Doug McClean

Якщо ви не використовуєте свою сторінку як text / xhtml, а не текстові / html-браузери, вони надаватимуть її як HTML, тому застосовуватимуться правила HTML. Без поваги, один за принципами w3C НЕ ПОРУЧИТИ ВЕБ. Оскільки він працює зараз, він, швидше за все, запрацює завтра.
Діод - Джеймс Макфарлейн

8
XHTML вимагає, щоб сторінки були добре сформованими у форматі XML, а XML допускає подвійні або одинарні лапки навколо атрибутів.
Нед Батчелдер

@SoftwareMonkey Власне, вам потрібно application/xhtml+xmlабо application/xml.
rink.attendant.6
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.