Анализ 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 не делала то, что я хотел сделать.
Ответы
Ответ 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/