Pojedyncze i podwójne cudzysłowy („vs”)

250

Zawsze używałem pojedynczych cudzysłowów, pisząc ręcznie HTML. Pracuję z dużą ilością renderowanego HTML, który zawsze używa podwójnych cudzysłowów. To pozwala mi ustalić, czy HTML został napisany ręcznie, czy wygenerowany. Czy to dobry pomysł?

Jaka jest różnica między nimi? Wiem, że oba działają i są obsługiwane przez wszystkie nowoczesne przeglądarki, ale czy istnieje prawdziwa różnica, w której jedna jest lepsza od drugiej w różnych sytuacjach?

ctrlShiftBryan
źródło
5
Aby odpowiedzieć na pytanie, czy stosowanie pojedynczych i podwójnych cudzysłowów jako środków do ustalenia odręcznego i wygenerowanego HTML, nie, prawdopodobnie nie jest to dobry pomysł. Chociaż kod, który jest niespójny (w niektórych miejscach używa pojedynczego, w innych podwójny), jest zapewne pisany ręcznie, jestem pewien, że wiele osób (w tym ja) używa wszędzie cudzysłowów, ale z pewnością nasz kod nie jest generowany komputerowo; )
Doktor J
@ Odpowiedź Aito jest rzeczywiście poprawna i powinna zostać zaakceptowana ... Osobiście używam pojedynczych cudzysłowów dla krótkich atrybutów, takich jak pojedyncze słowa kluczowe / tagi, adresy URL i referencje; wszystko, co właściwie nie jest przeznaczone do odczytania przez człowieka. W przypadku dłuższych tekstów lub czegokolwiek, co może zawierać spacje lub pojedyncze cytaty / apostrofy - jako treść używam podwójnych cudzysłowów. To tylko kwestia twojego stylu (lub przewodnika po stylu, którego używasz)
cedbeu
1
sprawdź 10 głównych stron internetowych i zobacz, z czego korzysta większość z nich, takich jak stackoverflow, youtube / google, wikipedia. Do tej pory mam problem ze znalezieniem głównych stron internetowych, które używają pojedynczych cytatów.
Timo Huovinen

Odpowiedzi:

391

W3 org powiedział :

Domyślnie SGML wymaga, aby wszystkie wartości atrybutów były rozdzielane przy użyciu albo podwójnych cudzysłowów (dziesiętny 34 ASCII), albo pojedynczych cudzysłowów (dziesiętny 39 ASCII). Pojedyncze znaki cudzysłowu mogą być zawarte w wartości atrybutu, gdy wartość jest rozdzielana znakami podwójnego cudzysłowu i odwrotnie. Autorzy mogą również wykorzystywać odwołania do znaków numerycznych do reprezentowania podwójnych cudzysłowów ( ") i pojedynczych cudzysłowów ( '). W przypadku podwójnych cudzysłowów autorzy mogą również użyć odwołania do znaku ".

Więc ... wydaje się, że nie ma różnicy. Tylko zależy od twojego stylu.

Aito
źródło
38
a spójność (z „lub”) najprawdopodobniej spowoduje wyższy współczynnik kompresji w przypadku wyświetlania stron skompresowanych (gzip, deflate)
cherouvim
2
@ Aito, to dotyczy SGML. W przypadku HTML nie wszystkie wartości atrybutów muszą być rozdzielane
Pacerier
4
Sugeruję, że pojedynczy nad podwójnym - Po co używać dwóch, gdy można wykonać tę pracę.
Ujjwal Singh
7
@JohnHunt: Właśnie wykonałem szybki test pliku js 1823 bajtów (losowy model szkieletu z losowej aplikacji). Wyjście gzip, jeśli wszystkie cytaty są takie same (albo 'albo "), miało 809 bajtów. Mieszanie ich zwiększyło wydajność do 829 bajtów. Może to być dla ciebie nieistotne, ale to nie znaczy, że nie ma znaczenia dla wszystkich.
cherouvim
3
Jeśli ktoś powie „och, to taki niski potencjał, prawdopodobnie nieistotny” dla stu „prawdopodobnie nieistotnych” rzeczy, następuje śmierć tysiąca igieł. Przy rozsądnym wysiłku warto oszczędzić IMO.
KONTRAKT MÓWI, ŻE PRAWO
67

Używam "jako najwyższego poziomu i 'jako drugiego poziomu, jak sobie wyobrażam większość ludzi. Na przykład

<a href="#" onclick="alert('Clicked!');">Click Me!</a>

W tym przykładzie musisz użyć obu, jest to nieuniknione.

NibblyPig
źródło
38
Robię to również, ale można tego uniknąć, jeśli unikniesz wstawiania javascript w html.
cherouvim
4
Istnieją inne sytuacje, w których javascript nie jest wbudowany, w których mogą być wymagane pojedyncze cudzysłowy, na przykład przy użyciu data-*atrybutów niestandardowych . W zależności od aplikacji i sposobu korzystania z data-*atrybutów może być konieczne użycie '„wewnątrz "”. Czasami używamy ich do śledzenia zdarzeń Google Analytics:<a href="..." data-track="Homepage Banner|Clicked|Dick's Sporting Goods">click me</a>
Jake Wilson
3
Zastanów sięvar x = "<a href='" + url + "'>click me</a>";
NibblyPig
4
Można tego łatwo uniknąć w następujący sposób: <a onclick="alert(\"Clicked!\")">. Jest to jednak o wiele mniej czytelne.
fabspro
2
Jednak nie jestem do końca pewien, czy jest to oficjalnie obsługiwane przez SGML i HTML5.
fabspro
26

Cytowanie konwencji dla programistów stron internetowych

Krótka odpowiedź

W HTML użycie pojedynczych cudzysłowów (') i podwójnych cudzysłowów (") jest wymiennych, nie ma różnicy.

Jednak spójność jest zalecana, dlatego musimy wybrać konwencję składni i używać jej regularnie.

Długa odpowiedź

Tworzenie stron internetowych często składa się z wielu języków programowania. HTML, JS, CSS, PHP, ASP, RoR, Python, itp. Z tego powodu mamy wiele konwencji składni dla różnych języków programowania. Często nawyki z jednego języka podążają za nami do innych języków, nawet jeśli nie jest to uważane za „właściwe”, tj. Komentujące konwencje. Konwencje cytowania należą również do tej kategorii.

Ale zwykle używam HTML ściśle w połączeniu z PHP. W PHP istnieje duża różnica między pojedynczymi i podwójnymi. W PHP z podwójnymi cudzysłowami „możesz wstawiać zmienne bezpośrednio w tekście ciągu”. (scriptingok.com) A gdy używasz pojedynczych cudzysłowów, „tekst wygląda jak jest”. (scriptingok.com)

PHP zajmuje więcej czasu na przetwarzanie ciągów cudzysłowów . Ponieważ parser PHP musi przeczytać cały ciąg z wyprzedzeniem, aby wykryć dowolną zmienną w środku - i połączyć ją - przetwarzanie zajmuje więcej czasu niż ciąg z pojedynczym cudzysłowem. (scriptingok.com)

 

Pojedyncze cytaty są łatwiejsze na serwerze . Ponieważ PHP nie musi z góry czytać całego łańcucha, serwer może działać szybciej i szczęśliwie. (scriptingok.com)

Inne rzeczy do rozważenia

  1. Częstotliwość podwójnych cudzysłowów w ciągu. Uważam, że muszę częściej używać podwójnych cudzysłowów („) w ciągach niż pojedynczych cudzysłowów (') w ciągach. Aby zmniejszyć liczbę wymaganych znaków specjalnych, wolę ograniczniki pojedynczych cudzysłowów.
  2. Łatwiej jest zrobić pojedynczą wycenę. Jest to dość oczywiste, ale aby wyjaśnić, dlaczego naciśnij klawisz SHIFT więcej razy, niż musisz.

Moja konwencja

Z takim zrozumieniem PHP ustawiłem konwencję (dla siebie i reszty mojej firmy), że ciągi mają być domyślnie reprezentowane jako pojedyncze cudzysłowy w celu optymalizacji serwera. Podwójne cudzysłowy są używane w ciągu, jeśli wymagane są cudzysłowy, takie jak JavaScript w atrybucie, na przykład:

<button onClick='func("param");'>Press Me</button>

Oczywiście, jeśli jesteśmy w PHP i chcemy, aby parser obsługiwał zmienne PHP w ciągu, powinniśmy celowo stosować podwójne cudzysłowy. $a='Awesome'; $b = "Not $a";

Źródła

Pojedyncze cytaty vs Podwójne cytaty w PHP. (nd). Pobrano 26 listopada 2014 r. Z http://www.scriptingok.com/tutorial/Single-quotes-vs-double-quotes-in-PHP

Dustin Poissant
źródło
3
Wiadomo, że różnica między wydajnością pojedynczego cytatu a podwójnego cytatu w PHP wynosiła zero lat, zanim udzieliłeś
Conor Mancone
1
W swoich ciągach znajdziesz więcej podwójnych cudzysłowów niż pojedynczych cudzysłowów? Ciekawy. Nie pamiętam, kiedy ostatni raz miałem w cudzysłowie podwójny cytat.
Zonker.in
Stale. W ciągu ostatnich 10 lat jako programista z pełnym stosem musiałem używać podwójnych cudzysłowów w ciągu 10 razy częściej niż pojedyncze cudzysłowy. Najczęstszym przykładem JavaScript jest selektor atrybutów, który działa TYLKO z podwójnymi cudzysłowami, więc document.querySelector("[name^='myname']")nie działa wcale, a document.querySelector('[name^="myname"]')działa idealnie.
Dustin Poissant
@DustinPoissant WHAAAT ?? W jakiej przeglądarce?
Pan Lister
14

Jeśli jest tak samo, być może użycie pojedynczych cudzysłowów jest lepsze, ponieważ nie wymaga przytrzymania klawisza Shift. Mniej naciśnięć klawiszy == mniejsza szansa na RSI.

stko
źródło
2
cóż, przynajmniej w układzie Galactic Common. (cisza-cisza)
n611x007
1
Jakie ryzyko RSI i liczba naciśnięć klawiszy ma związek ze standardami kodowania?
Dib
tak wiele opinii, że nie ma różnicy między pojedynczymi i podwójnymi cudzysłowami, ale tylko jedna, która wyjaśnia, że ​​liczba naciśnięć klawiszy różni się o DWÓCH. Potrzebujemy wielu cytatów. Czy mogę dodać sugestię, że być może potrzeba więcej neuronów, aby wystrzelić w celu rozpoznania wzoru podwójnego cytatu w naszym mózgu?
Roland
To nie dotyczy francuskich klawiatur.
Tokeeen.com,
11

W HTML nie sądzę, czy ma to znaczenie, czy używasz, "czy ', ale powinien być używany konsekwentnie w całym dokumencie.

Moje własne użycie preferuje użycie atrybutów / html ", podczas gdy 'zamiast tego używa wszystkich javascript .

To sprawia, że ​​nieco łatwiej jest mi czytać i sprawdzać. Jeśli twoje użycie jest dla ciebie bardziej sensowne niż moje, nie ma potrzeby zmian. Ale dla mnie, Twój kod będzie czuć się bałagan. To wszystko osobiste.

David mówi, że przywraca Monikę
źródło
Dlaczego należy go konsekwentnie stosować? Tylko dla czytelności?
harmonogramofly
Ponieważ łatwiej jest w ten sposób uniknąć błędów.
David mówi, że przywraca Monikę
2
Często używam "również atrybutów , ale innym razem piszę kod w kodzie PHP, w którym wolałbym echoużywać tego "w celu umożliwienia parsowania. Wszelkie atrybuty HTML w tym echu są bardziej czytelne, jeśli używasz ''s. Pewnie, że nie jest spójny, ale jest znacznie łatwiejszy bez wszystkich odwrotnych ukośników.
harmonogramofly
3
Cokolwiek dla ciebie działa, jest w porządku; bycie konsekwentnym nie oznacza „zawsze rób X”, to po prostu oznacza „w sytuacji X rób to w ten sposób”, spójność może uwzględniać kontekst; i najlepiej jest jako taki stosować.
David mówi, że przywraca Monikę
9

W rzeczywistości najlepszym sposobem jest sposób, który zaleca Google. Podwójne cytaty: https://google.github.io/styleguide/htmlcssguide.xml?showone=HTML_Quotation_Marks#HTML_Quotation_Marks

Zobacz https://google.github.io/styleguide/htmlcssguide.xml?showone=HTML_Validity#HTML_Validity Cytowana rada od Google: „Używanie prawidłowego HTML jest wymiernym podstawowym atrybutem jakości, który przyczynia się do poznawania wymagań technicznych i ograniczeń, i zapewnia prawidłowe użycie HTML ”.

Stuart
źródło
Zdecydowana większość stron internetowych, które do tej pory spotkałem, w tym przepełnienie stosu, używa podwójnych cudzysłowów, myślę, że spójność w Internecie jest lepsza, więc poprawna odpowiedź IMHO to także „podwójne cudzysłowy”.
Timo Huovinen
2
Ale dlaczego!? Dlaczego "ponad '!
San
2
@San Consistency, głównie. Zgodnie z amerykańsko-angielskim standardem podwójne cudzysłowy odnoszą się do cudzysłowów, a pojedyncze cudzysłowy do podcywat.
Nielsvh
6

Znam DUŻO ludzi by się nie zgodziło, ale to właśnie robię i naprawdę lubię taki styl kodowania: właściwie nie używam cytatów w HTML, chyba że jest to absolutnie konieczne.

Przykład:

<form method=post action=#>
<fieldset>
<legend>Register here: </legend>
  <label for=account>Account: </label>
  <input id=account type=text name=account required><br>
  <label for=password>Password: </label>
  <input id=password type=password name=password required><br>
...

Podwójne cudzysłowy są używane tylko wtedy, gdy w wartościach atrybutów lub cokolwiek innego są spacje:

<form class="val1 val2 val3" method=post action=#>
  ...
</form>
Randy Tang
źródło
1
Czy jest jakiś powód? A może po prostu „lubisz taki styl kodowania”?
Królik Bugs,
4
Bez cudzysłowów HTML wygląda na znacznie czystszy (a rozmiar pliku jest nieco mniejszy). To jedyny powód i nic więcej. Co więcej, naprawdę nie widzę sensu, aby wymagać od każdego atrybutu cudzysłowu. Dlaczego nie można po prostu pominąć, aby zaoszczędzić kłopotów? Nawet w3.org akceptuje wartości niecytowanych atrybutów ( w3.org/TR/html-markup/syntax.html#syntax-attr-unquoted ). Prosty jest lepszy niż złożony. Czy cytaty to jakiś rodzaj religii?
Randy Tang,
5
Nie, nie znam żadnej religii. Od dłuższego czasu zajmuję się HTMLem i nigdy wcześniej nie widziałem twojego stylu ... dlatego zapytałem.
Królik Bugs,
1
Ponadto, minizatory HTML usuwają również niepotrzebne cytaty.
Nimrod,
2
Problem z pomijaniem cudzysłowów wokół wartości atrybutów polega na tym, że różne standardy mają różne listy znaków, które należy zacytować. Na przykład HTML4 powiedział, że tylko wartości składające się z liter, cyfr, myślników i kropek mogą pozostać bez cudzysłowu, ale HTML5 mówi, że wszystko idzie poza spacjami i „” <=>, więc powinieneś być ostrożny, szczególnie w przypadku starszych przeglądarek!
Mr Lister
5

Używanie podwójnych cudzysłowów w HTML

to znaczy

<div class="colorFont"></div>

Używanie pojedynczych cudzysłowów w JavaScript

to znaczy

$('#container').addClass('colorFont');
$('<div class="colorFont2></div>');
Alan Dong
źródło
2

Mam problem z używaniem Bootstrap, w którym użycie podwójnych cudzysłowów miało znaczenie w porównaniu do używania pojedynczego cudzysłowu (co nie działało). class = „row-fluid” dało mi problemy powodujące, że ostatni zakres spadł poniżej innych zakresów, zamiast ładnie siedzieć obok po prawej stronie, podczas gdy class = „row-fluid” działał.

MikeP
źródło
1

jeśli piszesz asp.net, od czasu do czasu musisz używać podwójnych cudzysłowów w instrukcjach Eval i pojedynczych cudzysłowów do ograniczania wartości - dzieje się tak głównie po to, aby kod wbudowany w C # wiedział, że używa łańcucha w kontenerze eval, a nie znaku. Osobiście używałbym tylko jednego lub drugiego jako standardu i nie mieszałbym ich, wygląda na niechlujne to wszystko.

Mauro
źródło
1

Używanie „zamiast”, gdy:

<input value="user"/> //Standard html
<input value="user's choice"/> //Need to use single quote
<input onclick="alert('hi')"/> //When giving string as parameter for javascript function

Używanie „zamiast”, gdy:

<input value='"User"'/> //Need to use double quote
var html = "<input name='username'/>" //When assigning html content to a javascript variable
a1204773
źródło
3
W przypadku „przypisywania zawartości HTML do zmiennej js” zazwyczaj wolę robić coś przeciwnego: var html = '<input name="username" />';zachowaj spójność z resztą HTML :)
Erenor Paz
1

Nie ma to znaczenia dla html, ale jeśli generujesz html dynamicznie za pomocą innego języka programowania, jeden sposób może być łatwiejszy niż inny.

Na przykład w Javie podwójny cudzysłów służy do wskazania początku i końca łańcucha, więc jeśli chcesz zawrzeć podwójny cudzysłów w łańcuchu, musisz uciec przed nim odwrotnym ukośnikiem.

String s = "<a href=\"link\">a Link</a>"

Nie masz takiego problemu z pojedynczym cytatem, dlatego użycie pojedynczego cytatu zapewnia bardziej czytelny kod w Javie.

String s = "<a href='link'>a Link</a>"

Zwłaszcza jeśli musisz pisać elementy HTML z wieloma atrybutami. (Uwaga: Zazwyczaj używam biblioteki takiej jak jhtml do pisania HTML w Javie, ale nie zawsze jest to praktyczne)

Paul Taylor
źródło
Odbyłem dwa staże w serwletach. Analizowałem swój kod i dopiero teraz zacząłem zdawać sobie sprawę z rzeczywistości na podstawie podwójnych cudzysłowów, pojedynczych cudzysłowów i łączenia ciągów. Witryna, w której studiowałem, zawierała podwójne cudzysłowy w html i pojedyncze cudzysłowy w java. Nawet nie zdawałem sobie sprawy. Cieszę się, że w końcu to dostałem ...
Michael
0

Jestem tu nowicjuszem, ale używam znaku pojedynczego cudzysłowu tylko wtedy, gdy używam znaku podwójnego cudzysłowu w pierwszym. Jeśli nie jestem pewien, pokażę Ci przykład:

<p align="center" title='One quote mark at the beginning so now I can
"cite".'> ... </p>

Mam nadzieję, że pomogłem.

Marcin C.
źródło
-5

W PHP stosowanie podwójnych cudzysłowów powoduje niewielki spadek wydajności, ponieważ nazwy zmiennych są oceniane, więc w praktyce zawsze używam pojedynczych cudzysłowów podczas pisania kodu:

echo "This will print you the value of $this_variable!";
echo 'This will literally say $this_variable with no evaluation.';

Możesz więc napisać to zamiast tego;

echo 'This will show ' . $this_variable . '!';

Uważam, że JavaScript działa podobnie, więc bardzo niewielka poprawa wydajności, jeśli ma to dla Ciebie znaczenie.


Dodatkowo, jeśli spojrzysz aż do specyfikacji HTML 2.0, wszystkie tagi wymienione tutaj;

Dokumentacja W3 HTML DTD

(Używaj podwójnych cudzysłowów). Spójność jest ważna bez względu na to, z którego często korzystasz.

Raiden
źródło
13
JavaScript nie ocenia nazw zmiennych w ciągach. W JavaScript nie ma różnicy między „a”.
John Mellor,
-9

Podwójne cudzysłowy są używane jako ciągi znaków (tj. „To ciąg”), a pojedyncze znaki są używane dla znaku (tj. „A”, „b” lub „c”). W zależności od języka programowania i kontekstu można uniknąć używania podwójnych cudzysłowów dla znaku, ale nie pojedynczych cudzysłowów dla ciągu.

HTML nie dba o to, którego używasz. Jeśli jednak piszesz HTML w skrypcie PHP, powinieneś trzymać się podwójnych cudzysłowów, ponieważ będziesz musiał uciec od nich (tj. \ "Cokolwiek \"), aby uniknąć pomieszania siebie i PHP.

CD Reimer
źródło
Znam kilka języków programowania, ale taki, w którym jest to prawdą.
mikl
1
@mikl ogólna praktyka w języku C # i Java to ciągi znaków w podwójnych cudzysłowach i znaki w pojedynczych cudzysłowach. Ale to nie daje potwierdzenia tej odpowiedzi. Chyba że jest to odpowiedź na inne pytanie.
Evorlor,