Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Улучшаем удобочитаемость текста (Navigator)
Автор Сообщение
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Вс Мар 20, 2005 8:45 pm (написано за 1 минуту 55 секунд)
   Заголовок сообщения: Улучшаем удобочитаемость текста
Ответить с цитатой

// Если не так назвал тему, не пинайте

Эта функция заменяет:
  1. Простые кавычки на «ёлочки»
  2. «Минус» между словами на тире (—)
  3. Также заменяет два или три минуса между словами на тире
  4. Убирает пробелы между скобками и словами («( слово )« становится в »(слово)»)
  5. То же самое, но для кавычек
например,
Цитата:
Я ""кажется" "что-то"" -- ( забыл )
становится в
Цитата:
Я ««кажется» «что-то»» — (забыл)
К сожалению, в регулярных выражениях я не очень сйлён, поэтому могут быть глюки... подскажите, если что.

Код функции:
Код (php): скопировать код в буфер обмена
function tipografika($str) {
        $str = preg_replace("/\"(|(.+?))\"/",\\2»",$str); // Делаем «правильные» кавычки
        $str = preg_replace("/»(|(.+?))«/",\\2»",$str); // Устраняем косяки, которые могут возникнуть благодаря предыдущему выражению
        $str = preg_replace("/«(.+?)«(.+?)»(.+?)»/",\\\\\\3»",$str); // Опять устраняем косяки =)
        $str = preg_replace("/(.+?)\s-\s(.+?)/","\\1 — \2",$str); // Заменяем «минус» между словами на тире
        $str = preg_replace("/(.+?)\s--\s(.+?)/","\\1 — \\2",$str); // Заменяем два минуса между словами на тире
        $str = preg_replace("/(.+?)\s---\s(.+?)/","\\1 — \\2",$str); // Заменяем три минуса между словами на тире
        $str = preg_replace("/\(\s(.+?)(|\s)\)/","(\\1)",$str); // Убираем пробелы между словами и скобками
        $str = preg_replace("/«\s(.+?)(|\s)»/",\\1»",$str); // Убираем пробелы между словами и кавычками
        return $str;
}


Последний раз редактировалось: Navigator (Пн Мар 21, 2005 8:31 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Юрий Насретдинов
Модератор



Зарегистрирован: 13.03.2003
Сообщ.: 8537
Карма: 232
   поощрить/наказать

Откуда: 007 495

СообщениеДобавлено: Вс Мар 20, 2005 9:36 pm (спустя 51 минуту; написано за 37 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator
http://www.artlebedev.ru/tools/typograf/

Лучше бы сделали, чтобы Ваш скрипт отправлял текст туда и выдирал соответствующий результат - пользы было бы намного больше
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора ICQ Number
striimii
Участник форума



Зарегистрирован: 14.03.2005
Сообщ.: 50
Карма: 11
   поощрить/наказать

Откуда: Москва, Россия

СообщениеДобавлено: Вс Мар 20, 2005 10:31 pm (спустя 54 минуты; написано за 1 минуту 45 секунд)
   Заголовок сообщения:
Ответить с цитатой

Ходить куда-то из скрипта не есть лучшее решение. Времени это займет в разы дольше самой кривонаписанной процедуры. Да и надежность соединения еще сыграет немаловажную роль.

Лучше экспериментально пробить несколько текстовиков у лебедева, и посмотреть что он выправляет. Тоже и также сделать потом у себя.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7221
Карма: 219
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Вс Мар 20, 2005 11:12 pm (спустя 40 минут; написано за 46 секунд)
   Заголовок сообщения:
Ответить с цитатой

yUAC
Я, конечно, извиняюсь, но почему эта тема до сих пор в "Готовых решениях"? Раз обсуждение приняло такой оборот?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Зарегистрирован: 12.06.2004
Сообщ.: 2267
Карма: 109
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Пн Мар 21, 2005 12:22 am (спустя 1 час 9 минут; написано за 2 минуты 6 секунд)
   Заголовок сообщения:
Ответить с цитатой

yUAC
Кстати этот тупограф заменяет минус на знак #151;, на что ругается валидатор XHTML с w3c.org. А вот на mdash; он не ругается, поэтому я предпочитаю именно его.

Maus
Да уж сабж сыроват -- но направление верное! =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 8:33 am (спустя 8 часов 11 минут; написано за 1 минуту 5 секунд)
   Заголовок сообщения:
Ответить с цитатой

Немного исправил функцию -- были небольше косяки, вроде этого:
Navigator писал(а):
(«( слово )« становится в »(слово)»)
Я в функции, правда, заменяю на сами символы, а не на их эквиваленты... но впрочем и так сойдёт =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13535
Карма: 399
   поощрить/наказать


СообщениеДобавлено: Пн Мар 21, 2005 12:12 pm (спустя 3 часа 39 минут)
   Заголовок сообщения:
Ответить с цитатой


М

Navigator писал(а):
 в регулярных выражениях я не очень сйлён, поэтому могут быть глюки...
Вообще говоря, с такой постановкой вопроса - в Готовых решениях этому топику не место. Так что извините... Давайте так сделаем. Вы эту функцию поиспользуете некоторое время (скажем, пару месяцев). За это время наверняка найдутся баги, Вы их исправите в своих проектах. А уж затем - в Готовые решения положим.

Перенесено из форума: Склад готовых решений :: PHP.
Перенесено в форум: Разное :: PHP.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7221
Карма: 219
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Мар 21, 2005 1:35 pm (спустя 1 час 22 минуты; написано за 2 минуты 20 секунд)
   Заголовок сообщения:
Ответить с цитатой

Код (php): скопировать код в буфер обмена
function tipografika($str) {
// ...
        $str = preg_replace("/(.+?)\s-+?\s(.+?)/","\\1 & mdash; \\2",$str); // Заменяем «минусы» между словами на тире
// ...
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4030
Карма: 248
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 2:01 pm (спустя 25 минут; написано за 3 минуты 35 секунд)
   Заголовок сообщения:
Ответить с цитатой

Есть замечательная штука в регах "Граница слова" называется.
Код (php): скопировать код в буфер обмена
preg_replace("/\b(\s+)-{1,3}(\s+)\b/","\\1—\\2",$str);
И ещё
Код (php): скопировать код в буфер обмена
preg_replace(array("/\b\"/","/\"\b/"),array("»","«"),$str);
А удалять пробелы между кавычками и словами - плохая практика.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 3:20 pm (спустя 1 час 19 минут; написано за 1 минуту 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox, спасибо.
WingedFox писал(а):
А удалять пробелы между кавычками и словами - плохая практика.
Вот, например, « слово ». А вот другое «слово». Что приятнее читается?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4030
Карма: 248
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 3:48 pm (спустя 27 минут; написано за 2 минуты 47 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator
Пожалуйста.

Правильнее читать так, как решил автор.
А учитывая что в качестве кавычек используется знак дюйма, определить автоматически направление "ёлочек" и "лапок" - нетривиальная задача. Решать её регулярными выражениями - совсем плохая идея.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7221
Карма: 219
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Мар 21, 2005 4:16 pm (спустя 27 минут; написано за 14 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
Решать её регулярными выражениями - совсем плохая идея.
А как же иначе её решать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4030
Карма: 248
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 4:20 pm (спустя 4 минуты; написано за 59 секунд)
   Заголовок сообщения:
Ответить с цитатой

Maus
Либо руками, либо посимвольным анализом текста, допуская что первая кавычка является открывающей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 5:23 pm (спустя 1 час 2 минуты; написано за 41 секунду)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
руками
функция и есть для того, чтобы ничего не делать «руками» =)
WingedFox писал(а):
либо посимвольным анализом текста
эээ... это как?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4030
Карма: 248
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 5:30 pm (спустя 7 минут; написано за 4 минуты 9 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator писал(а):
функция и есть для того, чтобы ничего не делать «руками» =)
Если функция не умеет давать полностью адекватный результат, то лучше её не применять.
Иначе будут появляться комментарии типа:
Navigator писал(а):
// Устраняем косяки, которые могут возникнуть благодаря предыдущему выражению
// Опять устраняем косяки =)
И всё равно адекватный результат будет получаться далеко не всегда.
А правила оформления текста внедрить в производственный процесс совсем не трудно.
Navigator писал(а):
эээ... это как?
Посимвольное чтение файла, анализ появляющихся кавычек, определение направленя кавычки в зависимости от контекста... =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 9:43 pm (спустя 4 часа 12 минут; написано за 48 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
А правила оформления текста внедрить в производственный процесс совсем не трудно.
я вообще-то эту ф-ю для форума планировал...
WingedFox писал(а):
Посимвольное чтение файла, анализ появляющихся кавычек, определение направленя кавычки в зависимости от контекста... =)
давайте, напишите, выложите, а потом вместе замерим Script execution time =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7221
Карма: 219
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Мар 21, 2005 10:02 pm (спустя 19 минут; написано за 42 секунды)
   Заголовок сообщения:
Ответить с цитатой

Navigator
А время тут уже роли играть не будет: если одна функция работает неверно - она автоматически аутсайдер.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4030
Карма: 248
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Вт Мар 22, 2005 10:17 am (спустя 12 часов 15 минут; написано за 5 минут 26 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator писал(а):
я вообще-то эту ф-ю для форума планировал...
Так никто и не мешает написать «правила оформления сообщений».
Заодно и предупредить, что включена функция для обработки текста.

Вообще, на мой взгляд, автоматически (без спроса) менять что-либо из вводимого мной - очень плохая идея.
Вот например, я выкладываю текст, в котором используется знак дюйма для обозначения размеров, а в результате получаю какие-либо кавычки. Несколько неприятная ситуация, не находите?
Navigator писал(а):
давайте, напишите, выложите, а потом вместе замерим Script execution time =)
А оно надо?

Maus
Это Вы правильно заметили =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Вт Мар 22, 2005 6:23 pm (спустя 8 часов 6 минут; написано за 1 минуту 47 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
Так никто и не мешает написать «правила оформления сообщений».
«такие» кавычки (а конкретнее клавиши Alt+0) в Internet Explorer'е+Windows XP вызывают такой же эффект, что и кнопка «Назад» =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:   
Начaть нoвую тeму   Ответить на тему Часовой пояс: GMT + 3 (Москва)
Страница 1 из 1   
Ответить
Имя
Тема
     

Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
    HTML ВЫКЛЮЧЕН
BBCode ВКЛЮЧЕН
Смайлики ВКЛЮЧЕНЫ
Вы можете начинать темы. Вы можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
  XML