Замена обычных кавычек на кавычки-елочки

Помогите написать регулярку, которая бы заменяла обычные кавычки " на типографские с учетом html тегов. Здесь (на хабре) например, срабатывает не во всех случаях

"кавычка-елочка в произведении <a href="http://site.com">"Ель"</a>"


«кавычка-елочка в произведении »Ель""
  • Вопрос задан
  • 16191 просмотр
Пригласить эксперта
Ответы на вопрос 8
akral
@akral
Произвольный HTML нельзя парсить регулярками. Регулярками нельзя парсить произвольный HTML.
Регулярки — не инструмент для парсинга HTML. Как уже многократно сказано, произвольный HTML регулярками парсить невозможно.

Подробнее на StackOverflow.
Ответ написан
@egorinsk
Это либо нельзя, либо крайне сложно сделать 1 регуляркой. Вам надо написать парсер HTML (можно воспользоваться впрочем встроенным в PHP DOM, но использовать готовые решение — для слабаков), который будет бить входной поток на тег, содержимое аттрибута, текст между тегами, а вот уже в содержимом аттрибутов и тексте между тегами менять вид кавычек.

Надо учесть, что в HTML кавычка также может быть представлена как §quot;
Ответ написан
joseph2
@joseph2
Используйте & laquo; и & raquo; вместо обычных кавычек в коде.
Ответ написан
Комментировать
joseph2
@joseph2
т.е.
<a href="http://site.com">& laquo;Ель& raquo;</a>"

Конечно же, пробелы нужно удалить. Не знаю как в комментах правильно экранировать эти символы.
Ответ написан
NeX
@NeX
jevix.ru/project/в нем есть автозамена
Либо прикрутите какой-нибудь типограф, например www.artlebedev.ru/tools/typograf/
Ответ написан
Комментировать
MarlboroMan
@MarlboroMan
Вспомнился Спектаторовский кавычкер, есть и PHP-реализация.
Ответ написан
Комментировать
DimaLondon
@DimaLondon
для этого необходимо писать вспомогательную ф-ю, которая учитывает закрытость открытой кавычки. И использовать ее в регулярке. Это несложно, но в ней надо учесть все варианты. Прямо так сразу и не напишу (ибо сейчас слегка «под градусом»).
Ответ написан
Комментировать
yurik417
@yurik417
Вот решение по замене кавычек 'одинарных' и " двойных " на «елочки» с помощью регулярки на JS. Попробуйте сделать по аналогии на PHP
www.mmmagnit.ks.ua/index.php/k2/item/21-liquotes
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы