Кавычки в русском языке
Кавычки в «.ru/Ководстве»

Программная генерация атрибутов HTML тэгов

Определения значений атрибутов

Согласно стандарту HTML 4.01  значения атрибутов тэгов должны1 заключаться в кавычки. Тип кавычек — одинарные или двойные, значения не имеет.

By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa. Authors may also use numeric character references to represent double quotes (") and single quotes (').

В JavaScript действуют аналогичные правила декларации строковых значений.

A string literal is zero or more characters enclosed in double (") or single (') quotation marks. A string must be delimited by quotation marks of the same type; that is, either both single quotation marks or both double quotation marks.

Такие же правила и в CSS.

Strings can either be written with double quotes or with single quotes. Double quotes cannot occur inside double quotes, unless escaped (as '\"' or as '\22'). Analogously for single quotes ("\'" or "\27").

Использование одинарных кавычек

Как известно, строковые переменные в языках Java или C#, на которых пишется большое количество серверных приложений, заключаются в двойные кавычки. Для включения в строковую переменную парной кавычки, она отделяется символом «\».
Использование одинарных кавычек для отделения значений атрибутов в строке HTML кода, генерируемого сервлетом,  позволяет избежать в коде каши из обратных слэшэй, делающих его, код, похожим на утыканную надолбами переднюю линию обороны. Это особенно заметно при генерации тэгов изобилующих атрибутами — таблиц, изображений или гиперссылок.

Пример из реального приложения, два варианта кода.

javax.servlet.jsp.jspWriter jspPage;
...
jspPage.print("<td class=\"dailyViewLegendHourNP\" height=\"4\">");
jspPage.print("<img src=\"images/blank_badge_daily.gif\" height=\"10\" width=\"8\" alt=\"\">");

jspPage.print("<td class='dailyViewLegendHourNP' height='4'>");
jspPage.print("<img src='images/blank_badge_daily.gif' height='10' width='8' alt=''>");

Так как в JavaScript строковая переменная может быть определена как с помощью двойных, так и одинарных кавычек2 , то при генерации HTML посредством JavaScript возможны варианты.

window.document.write("<td class='dailyViewLegendHourNP' height='4'>");
window.document.write('<td class="dailyViewLegendHourNP" height="4">');

Cherchez la femme

При разработке web-приложений поддерживающих интернационализацию, следует учесть, в европейских3 языках используются апострофы.
Если выражение, использующееся в качестве значения атрибута или параметра, будет содержать апострофы и при этом будет заключено в одинарные кавычки, то в лучшем случае будет сгенерировано сообщение об ошибке, в худшем — приложение будет работать некорректно. В самом худшем — иногда будет работать некорректно.

Генерация на JSP странице кода для сообщения об ошибке посредством JavaScript
с использованием библиотеки Struts.


alert('<bean:message key="errorMessage"/>');
Строка ресурсаСгенерированный сервлетом HTML
errorMessage=Значение выражения не может быть вычислено.alert('Значение выражения не может быть вычислено.');
errorMessage=Expression couldn't be evaluated.alert('Expression couldn't be evaluated.');

Нетрудно заметить, что выражение
alert('Expression couldn't be evaluated')

с точки зрения JavaScript является некорректным.

Пример из реального приложения.

alert("<bean:message key="editEvent.reloadCalendarView"/>");
ЯзыкСтрока ресурса
АнглийскийeditEvent.reloadCalendarView=Refresh Calendar View to view new or updated event.
НемецкийeditEvent.reloadCalendarView=Aktualisieren Sie die Kalender-Ansicht, um den neuen oder aktualisierten Ereignis anzuzeigen.
ФранцузскийeditEvent.reloadCalendarView=Actualisez l'affichage de l'agenda pour visionner l'\u00e9v\u00e9nement mise \u00e0 jour ou nouveau.

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

1) То, что должны, вовсе не означает, что атрибут не заключенный в кавычки будет проигнорирован. Однако согласно стандарту XHTML, заключение атрибутов в кавычки — обязательно.
JavaScript воспринимает не заключенную в кавычки строку как выражение, объект или константу.
2) В С/C++, Java, С# одинарными кавычками обозначается значение символьной переменной.
3) В качестве примеров использования апострофов в русском языке, кроме «Жанна д'Арк» и «д'Олбоеб» на ум ничего не пришло.