Подтвердить что ты не робот

Анализ HTML для устранения проблем с микротипами и глифами

Меня интересует microtypography проблемы в Интернете.

Мне нужен инструмент для исправления:

  • Котировки
    • "(& # 8220;) вводная цитата (вместо" )
    • "(& # 8221;) закрывающая цитата (вместо" )
  • Apostrophe
    • (& # 8217;) апостроф (вместо ')
  • Дефисы и дефисы
    • - (& # 8211; or & ndash;) en dash, используемый для диапазонов, например. "13-15 ноября" (вместо -)
    • - (& # 8212; или &—) em dash, используемый для изменения мысли, например. "Звездные войны - как все знают - удивительные". (вместо -, или -)
  • Многоточие
    • ... (& # 8230; или & hellip;) горизонтальный эллипс, используемый для указания упущения или паузы (вместо...).
  • И еще \o/

Все эти исправления зависят от языка контента. На французском языке, например, мы должны добавить незашифрованное (неразрывное) пространство перед каждым составленным глифом (:, ;, , ?, !,...) и нашими кавычками "вот так".

Для такого инструмента существует множество ограничений:

  • он не должен редактировать HTML внутри защищенных тегов (pre, code...)
  • он должен быть быстрым (используется на выходе CMS)
  • он не должен нарушать HTML
  • и т.д.

На рынке уже есть некоторые инструменты:

Все они более или менее основаны на SmartyPants, 2005 lib, не протестированы, не документированы, разбор HTML-кода вручную и не имеют отношения к другим правилам, чем английский. Ад нет.

Итак, мои вопросы:

  • Знаете ли вы о каком-нибудь достойном инструменте?
  • Как я могу это сделать? У меня уже есть POC, используя DomCrawler, но я не уверен. Какой лучший способ проанализировать и отредактировать HTML на PHP?

Изменить июль 2013 г.. Я разработал JoliTypo из тестов и опыта, которые я получил с этой проблемой, Никакая существующая lib не делала то, что я хотел сделать.

4b9b3361

Ответ 1

Мой несколько друг Шон создал что-то, что я использую для этой цели довольно часто. Вы можете посмотреть демо здесь: http://files.seancoates.com/lexentity/ он написал об этом здесь: http://seancoates.com/blogs/lexentity, и вы можете захватить источник здесь: https://github.com/scoates/lexentity

Это может не соответствовать вашим полным потребностям, но это начинается с английского.

Ответ 2

Вам может быть интересно tidy. Он связан с PHP 5+ (все, что вам нужно использовать, это libtidy). Он не просто разбирает HTML, но и исправляет его.

Но с локализацией вы сами - intl не содержит никаких данных о котировках - f.ex.; по крайней мере, я не мог их найти.

Ответ 3

Как о котировках, прочитайте этот тег Q, другие я бы использовал библиотеку bbcode. Поскольку было бы очень сложно написать алгоритм, чтобы различать тире, которые вам нужны. BBcode позволяет редактору выбирать, но в этом случае, когда редактор должен сделать действие. Вы можете подумать о том, чтобы предоставить какую-то кнопку для вставки специальных символов. Для вещей, которые легко распознать, вы просто создаете новые правила для BBcode lib, и если они должны быть локальными, вы создадите другой набор правил для разных языков. Очевидно, что наследование в ООП пригодится здесь.

Ответ 4

Как говорили другие, решение на основе регулярных выражений может быть опасным/запрещенным...

Но если у вас есть блокировка контента, на который вы хотите использовать этот инструмент (и это похоже на то, что вы делаете, если контент поступает с вашей CMS), это похоже на расширение программы Perl Demoroniser может позаботиться об этом для вас: http://www.fourmilab.ch/webtools/demoroniser/