Jax Опубликовано 25 Октября 2006 Жалоба Поделиться Опубликовано 25 Октября 2006 (изменено) Стоит понимать разницу между дефисом и тире — первое, разделяет между собой части одного слова, а второе — слова в предложении. По логике вещей, они и писаться должны по-разному. Но так же хочется сказать и про кавычки. В России, общепринятыми кавычками являются не "...", а ёлочки — «...». Вот я и решил, исправить этот недочет, в форумах IPB. Решение для 1.1.x, 1.2.x, 1.3.х и 2.0.хОткрыть ./sources/lib/post_parser.php и найти: // Start off with the easy stuff Ниже добавить:// idea (c) http://emuravjev.ru $txt = preg_replace( "#\"(.+?)\"#", "«\\1»", $txt ); $txt = preg_replace( "#\ - #" , " — " , $txt ); $txt = preg_replace( "#\ -#" , " —" , $txt ); $txt = preg_replace( "#\- #" , "— " , $txt ); Решение для 2.1.xАналогично, только файл для редактирования должен быть ./sources/classes/bbcode/class_bbcode.php Здесь будет учитываться дефис, а также пробел после тире, перед ним и с обеих сторон. Я считаю, что такое необходимо для всех русскоязычных форумов. Изменено 19 Февраля 2009 пользователем Jax Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 25 Октября 2006 Жалоба Поделиться Опубликовано 25 Октября 2006 А зачем модификатор i ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 25 Октября 2006 Автор Жалоба Поделиться Опубликовано 25 Октября 2006 Ну, можно и без него Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ZiDaNe Опубликовано 25 Октября 2006 Жалоба Поделиться Опубликовано 25 Октября 2006 А в 2.1.х эта проблема есть? Если да, то как лечить Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 25 Октября 2006 Жалоба Поделиться Опубликовано 25 Октября 2006 Да так-же всё. Только я бы не сказал что это проблема Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Scream89 Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 В 2.1.6. не работает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 В 2.1.х не также, там не через post_parser.php Это не проблема, это просто должная правильность Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ZiDaNe Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 В 2.1.х не также, там не через post_parser.php А через что? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 Я обновил первый пост и написал реализацию для 2.1.х. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) $txt = preg_replace( "#\"(\S+?)\"#is", "«\\1»", $txt ); Во-первых, даже не подумает править кусок текста я прямой речью, хотя это не суть принципиально.Во-вторых, модификатор /s модифицирует метасимвол "точка", что она становится любым символом, я у тебя точки не вижу - зачем модификатор ? Меньше модификатор - меньше нагрузка.В-третьих, модификатор /i - указывает на то, что символы в шаблоне в любом регистре соответсвуют символам как верхнего, так и нижнего регистра. Т.е. например /A/i == /[aA]/, и ничего другого. У тебя в шаблоне нет символов, которые могут быть не в том регистре, HTML-код кавычки верстается форумом всегда в нижнем регистре.Далее, экранировать амперсенд совсем не надо.С этой ренуляркой закончили -) Следущие - вообще не должны быть регулярками, хватит и обычного str_replace, а он работает быстрее и кушает поменьше ресурсиков. PS: То, что я пишу - конечно придирки, но вот так, по чуть-чуть, а производительность-то падает на доли секунд. PPS: Совсем забыл, интерсное сочетание - +?, * ставить ИМХО - проще, и регулярке обработать ещё проще. Другое дело, что в данном случае - это нафиг не надо, иначе он будет заменять пустые кавычки, что не есть гут. Изменено 26 Октября 2006 пользователем Destruction Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) Во-первых, даже не подумает править кусок текста я прямой речью, хотя это не суть принципиально.Да, правильно. Исправил.В-третьих, модификатор /i - указывает на то, что символы в шаблоне в любом регистре соответсвуют символам как верхнего, так и нижнего регистра.Да его нет уже давно...Другое дело, что в данном случае - это нафиг не надо, иначе он будет заменять пустые кавычки, что не есть гут.Это я заметил. Как тогда можно по другому сделать? Изменено 26 Октября 2006 пользователем Jax Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) Окей, тогда если будет два фрагмента в кавычках, то он решит, что это одна например прямая речь, а в ней имя нарицательное, что - неверно.Смотри модификатор /U, но если его поставить - будет обратный эффект. Задача не тривиальная -) В-третьих, модификатор /i - указывает на то, что символы в шаблоне в любом регистре соответсвуют символам как верхнего, так и нижнего регистра.Да его нет уже давно..."#\"(.+?)\"#is Я слепой ? Изменено 26 Октября 2006 пользователем Destruction Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 Другое дело, что в данном случае - это нафиг не надо, иначе он будет заменять пустые кавычки, что не есть гут.Это я заметил. Как тогда можно по другому сделать?Оставь просто плюсик. Он соответсувует одному и более вхождениям. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) Ну да, так наверное лучше будет:$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt ); Изменено 26 Октября 2006 пользователем Jax Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) Так ведь и так можно:$txt = preg_replace( "#\"(.+?)\"#", "«\\1»", $txt );Заменив на точку, тебе понадобился модификатор /s, а ты его убрал -) Или текст в кавычках не бывает разбит на несколько строк? Хмм, пойду русский учить, в любом случае - решай сам, может ли текст быть разбит на несколько строк. И убери знак вопроса из выражения, смысл говорить парсеру, что у нас может быть 0 или 1 вхождение выражения имеющего 1 и более вхождений? -) PS: Я тебе про регулярку сейчас на десяток страниц разведу :-D Изменено 26 Октября 2006 пользователем Destruction Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 Нет, если делать так $txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );то действительно, текст в несколько строк не обрамляется елочками Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 Нет, если делать так $txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );то действительно, текст в несколько строк не обрамляется елочками Я об этом и говорю, другой вопрос - насколько это правильно. У меня с русским не ахти -) Давай по другим пунктам попробуй против моей критики -) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) Я об этом и говорю, другой вопрос - насколько это правильно. У меня с русским не ахти -)Ну а если идет цитата стихов? Пушкин писал:"Строка разПереход дваСтрока три" На самом деле такое он написал Давай по другим пунктам попробуй против моей критики -)С этим бы пока разобраться Изменено 26 Октября 2006 пользователем Jax Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 (изменено) А ещё можно, для форумов на нескольких языках, сделать выбор языка сообщения или ещё лучше - создать отдельные бб-коды, внутри которых будет производится этам замена. Надо бы это в качественный мод развернуть -) Я об этом и говорю, другой вопрос - насколько это правильно. У меня с русским не ахти -)Ну а если идет цитата стихов?Пушкин писал:"Строка разПереход дваСтрока три"Давай по другим пунктам попробуй против моей критики -)С этим бы пока разобраться 1. Вот, и я о том же подумал - нужен модификатор /s, чтобы стихи в нормуль кавычки ставил -)2. Ну разбирайся -) Так же посмотри на такие фразы (мб не совмем верно пишу, но суть - что несколько кавычек в разных ситуациях) + глянь описание модификатора /U.- "Здарова Васька, а ты уже посетил "ЗАО Электроника", или пойдёшь завтра?", сказал его друг."Цитата первая" ... текст ... "Цитата вторая" Я тут подумал - может не парится и создать новый бб-код, который будет менятся на обычную кавычку, ну в дополнение ко всему этому, чтобы пользователи могли сами корректировать сложные участки текста. Хотя можно попробывать определять 1-3 слов, как нарицательное, а больше - как цитату, тогда точность будет несколько выше в приведённых примерах. Изменено 26 Октября 2006 пользователем Destruction Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 26 Октября 2006 Автор Жалоба Поделиться Опубликовано 26 Октября 2006 Хотя можно попробывать определять 1-3 слов, как нарицательное, а больше - как цитату, тогда точность будет несколько выше в приведённых примерах.Это самый лучший вариант, из всего вышеперечисленного гемора =) Как я думаю.2. Ну разбирайся -)Ну вечерком сяду, подумаю.- "Здарова Васька, а ты уже посетил "ЗАО Электроника", или пойдёшь завтра?", сказал его друг.При использовании $txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );Выйдет нормально кстати — «Здарова Васька, а ты уже посетил «ЗАО Электроника», или пойдёшь завтра?», сказал его друг. В общем надо в любом случае доводить до ума =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 Сорки, отходил -) Стукни в ICQ (она в профиле), вместе подумаем -) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 26 Октября 2006 Жалоба Поделиться Опубликовано 26 Октября 2006 HTML-код кавычки верстается форумом всегда в нижнем регистре.жжошь Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
qqqq Опубликовано 27 Октября 2006 Жалоба Поделиться Опубликовано 27 Октября 2006 Респект как всегда! Топикстартер не перестает радовать опен-сурс возможностями! Спасибо! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
-Зверик- Опубликовано 30 Октября 2006 Жалоба Поделиться Опубликовано 30 Октября 2006 Спасибо! Я достаточно долго искал такой мод - да вот не было)) Только вот я заменил $txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt ); на $txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt ); так как FAR не сохранял «, получалось < . Да и html entity всегда будет работать и сохранятся правильно.. хм.... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 30 Октября 2006 Автор Жалоба Поделиться Опубликовано 30 Октября 2006 Это, это правильно, в принципе. Я бы тоже выложил с спец. символами, только форум парсит их. По этому более, так сказать, правильным, будет писать с «. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.