Вы сейчас здесь
«Облако» тэгов
link, small, tagless, tiny, 2003, big, 2008, 2010, январь, декабрь, сентябрь, 2001, 2004, 2002, август, апрель, март, июль, 2009, игры, октябрь, май, июнь, февраль, 2007, ноябрь, img, 2011, quote, wow, huge, блоги, кино, игровой дизайн, ребенок, половой вопрос, технологии, вебдев, lytdybr, фразы, живой журнал, жизнь, язык, яндекс, php, 2006, людишки, 2005, поисковики, software, video, inglish, 2000, смишно, диалоги, музыка, книги, культ личности, дейтинг, политика, интернет, 1999, rss, контент, flash, я, авторские проекты, реклама, прон, next-gen mmo, ореховые скорлупки, сми, js, программирование, fight club, register, социгры, спам, english reviews, американас, потребление, беллетристика, идеи, мое величие, iphone, usability, пидорасты, battle.net, lifestyle, starcraft 2, Тёма, соционика, spectator.ru, британские ученые, развитие, Масква, бабло, литература, фото, mobile, work, болкман, титаны, hard, hobius, mysql, интеллектуальный юмор, хостинг, blogowar.ru, графика, SEO, blogowar, magic, журналистика, злоба дня, религия, стартапы, social, tf2, цитаты, gzip, warhammer, браузеры, велосипед, киви, медикаментоз, общество, оговорки, html, воспитание, мифы, паранойа, письма в редакцию, учеба, 1998, soft, soviet, twdnkumus, глянцевые журналы, монетизация, норкотики, сайты, сиськи, типографика, тьюринг, mongodb, дизайн, железо, живут же люди, лолвут, плагиат, твиттер, тренд, 2012, about, бабушки, вещи, видео, зомбоящик, игрушки, социопатия,
Персональное
об авторе и сайте
мойкруг (резюме)
на G+
порнотумблер (rss)
инстаграм (хипстерские фото)

facebook
twitter

skype: acerbial
gtalk: dmitry.smirnov


C любовью к людишкам™,
♥ 1998 - 2013.

powered by mongodb.



Кавычки strike back

Постановка задачи: как известно, крутые дизайнеры и контент-девелуперы расставляют только правильные кавычки, которые в русском языке должны выглядить так:

Вася сказал: «Я живу в отеле Калифорния“».

Для этого в html нужно писать совсем хитрые комбинации:

Вася сказал: «Я живу в отеле „Калифорния“&#187

Если вам лениво писать все это от руки — можно писать простые кавычки — ’’ (которые на самом деле являются знаком дюйма), а потом пропустить текст через скрипт и он сам расставит все, как надо. Вдоволь намаявшись со скриптом годичной давности, я решил создать что-то универсальное, которое понимает html, даже «красиво» написанный с пробелами, типа: <img src = "сслыка" width = "23" alt= " а тут еще и альт идет" >. Кроме того, не надо забывать про вложенные кавычки и про то, что внутри текста с кавычками может идти любой html — тоже с кавычками, например —
Вася сказал: «Я живу в отеле „Калифорния“». Ох уж этот Вася.

Внимание! Самую свежую версию кавычкера можно скачать здесь.


function kavych ($contents)
{

// Kavychki (c) Spectator.ru

// замена кавычек в html-тэгах на символ "¬"
$contents=preg_replace ( "/<([^>]*)>/es", "'<'.str_replace ('"', '¬','1').'>'", $contents);

// замена кавычек внутри <code> на символ "¬"
$contents=preg_replace ( "/<code>(.*?)</code>/es", "'<code>'.str_replace ('"', '¬','1').'</code>'", $contents);

// расстановка кавычек: кавычка, перед которой идет ( или > или пробел = начало слова,
// кавычка, после которой не идет пробел = это конец слова.

$contents=preg_replace ( "/([>(s])(")([^"]*)([^s"(])(")/", "1«34»", $contents);

// что, остались в тексте нераставленные кавычки? значит есть вложенные!
if (stristr ($contents, '"')):

// расставляем оставшиеся кавычки (еще раз).
$contents=preg_replace ( "/([>(s])(")([^"]*)([^s"(])(")/", "1«34»", $contents);

// расставляем вложенные кавычки
// видим: комбинация из идущих двух подряд открывающихся кавычек без закрывающей
// значит, вторая кавычка - вложенная. меняем ее и идущую после нее, на вложенную (132 и 147)
while (preg_match ("/(«)([^»]*)(«)/", $contents)) $contents=preg_replace ( "/(«)([^»]*)(«)([^»]*)(»)/", "12&#132;4&#147;", $contents);

// конец вложенным кавычкам
endif;

// расстанавливаем правильные коды и тире
$contents = str_replace ('«','&laquo;', $contents);
$contents = str_replace ('»','&raquo;', $contents);
$contents = str_replace (' - ','&nbsp;&#151; ', $contents);

// меняем "¬" обратно на кавычки
$contents = str_replace ('¬','"', $contents);

// еще несколько строк кода, которые лично у меня делают всякие полезные вещи

return $contents;

}

Вы можете закопипастить (copy-paste) этот кусочек куда угодно. Там, где вам надо, просто вызовите эту функцию: $text=kavych ($text); и скажите мне «спасибо». Предложения по улучшению принимаются с благодарностью. (Шлите мылом).

Для тех, кто в танке: кавычки в вышеприведенном коде не «сами расставились», они так и должны быть. Повторяю: Вы можете закопипастить (copy-paste) этот кусочек куда угодно. И он будет работать.

PS.

Known bug у этого скрипта был только один: скрипт портит програмный код (например, PHP), приведенный на странице в качестве примера:

<? echo («кавычки сосут»); ?>

Есть и путь решения этого бага: использовать тэг CODE для выделения кода на странице: идеологически выдержанно, политически верно и удобно одновременно — и сделать так, чтобы скрипт ничего не менял внутри тэгов <code></code>:

<? echo ("кавычки не сосут"); ?>

(смотрите вторую строчку в скрипте)

Update

Комментарий от Александра Крылова.

Есть еще &prime; и &Prime; — как раз для того, чтобы с кавычками не путать.

prime = "&#8242;" -- prime = minutes = feet (для обозначения минут и футов),
Prime = "&#8243;" -- double prime = seconds = inches (для обозначения секунд и дюймов).

Вот вам выход — когда нужно обозначить именно дюймы, например: «Монитор 19″»

Update-2. То, что у меня стоит сейчас, как обычно, очень сильно отличается от того, что написано выше. Но общую идею вы поняли?..

0
Привет, Anonymous! Чтобы оставлять комментарии, надо авторизоваться.