`& mdash;` или `& # 8212;` есть ли разница в выводе HTML?

79

— или же —

Есть ли между ними разница? Один поддерживается лучше, чем другой?

Адам Рамадан
источник
7
Для полноты: фактический символ длинного тире («mdash»): - и должен быть такой же ширины, как буква «m»
Саймон Б.
6
да, заглавная М
Рэй Тайек

Ответы:

85

Парсеры SGML (или анализаторы XML в случае XHTML) могут обрабатывать —без необходимости обрабатывать DTD (что не имеет значения для браузеров, поскольку они просто поглощают суп из тегов), в то время как— как людям легче читать и писать в исходном коде.

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

Квентин
источник
13

Они точно такие же персонажи. См .: http://en.wikipedia.org/wiki/Dash

За исключением ошибок браузера, они будут отображаться одинаково во всех случаях, поэтому единственная разница будет касаться читабельности кода, на который будет указывать —.

Или, если вы используете UTF-8 в качестве кодировки в своем HTML-документе, вы можете ввести символ напрямую. Это тоже будет отображаться точно так же.

RoToRa
источник
5
Обратите внимание, что это верно только для HTML, в XML &8212;всегда работает, тогда как —зависит от объявления объекта.
Flimm
10

—:: —::\u2014

При представлении m-тире в текстовой строке JavaScript для вывода в HTML обратите внимание, что он будет представлен своим значением Unicode. Бывают случаи, когда символы амперсанда ('&') не разрешаются, особенно в некоторых контекстах в JSX. В этом случае ни то, —ни другое —работать не будет. Вместо этого вам нужно использовать управляющую последовательность Unicode: \u2014.

Например, при реализации render()метода вывода текста из переменной JavaScript:

render() {
   let text='JSX transcoders will preserve the & character—to ' 
            + 'protect from possible script hacking and cross-site hacks.'
   return (
     <div>{text}</div>
   )
}

Это выведет:

<div>JSX transcoders will preserve the & character&mdash;to protect from possible script hacking and cross-site hacks.</div>

Вместо представления с &префиксом - вы должны использовать \ u2014:

let text='JSX transcoders will preserve the & character\u2014to …'
Wrlee
источник
1
Отлично работает с React.
Грин
2

С веб-сайта W3 Общие элементы HTML, используемые для типографики

В целях переносимости ссылки на объекты Unicode должны быть зарезервированы для использования в документах, которые должны быть написаны в наборах символов UTF-8 или UTF-16. Во всех остальных случаях следует использовать буквенно-цифровые ссылки.

Перевод: если вы ищете самую широкую поддержку, выберите &mdash;

Камран
источник
1

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

Иоахим VR
источник