they’re
неверно и его следует избегать. Если вы хотите использовать закрывающую одинарную кавычку, чтобы воспроизвести типографскую практику рендеринга апострофов в виде наклонной кавычки, то правильный символ - это U + 2019 ПРАВИЛЬНАЯ ОДНОКВАЖНАЯ КАРТА, которая может быть записана как ’
или ’
. Или, если вы используете UTF-8, просто дословно включите как ’
.
’
должен относиться к символу U + 0092, мало используемому и бессмысленному управляющему символу, который обычно отображается как пустое поле или поле с отсутствующим глифом. И действительно, в XML это так.
Но в HTML (кроме XHTML, в котором используются правила XML), существует давняя странная хитрость браузера, заключающаяся в том, что ссылки на символы в диапазоне от €
до Ÿ
неверно интерпретируются как обозначение символов, связанных с байтами от 128 до 159 в кодовая страница Windows Western (cp1252) вместо символов Unicode с этими кодовыми точками. Наконец, стандарт HTML5 документирует это поведение.
Проблема в том, что Нокогири не знает об этой причуде и берет в своем слове ссылку на символ 146, заканчивающуюся символом 146 (\u0092
), который вам на самом деле не нужен. Я думаю, что Nokogiri использует libxml2 для разбора HTML, поэтому в конечном итоге правильным решением будет функция htmlParseCharRef
в libxml2 для замены символов 128–159.
Тем временем вы, возможно, могли бы попытаться «исправить» ссылки на символы вручную с помощью грубой подстановки строк, такой как ’
-> ’
перед синтаксическим анализом. Это немного неправильно, но, по крайней мере, в HTML единственное место, где вы можете иметь последовательность разметки ’
без ссылки на символы, будет в комментарии, так что, надеюсь, это не будет иметь значения, если вы тоже случайно изменили содержимое там .