Кавычки strike back
// 9 сентября 2002 годаПостановка задачи: как известно, крутые дизайнеры и
Вася сказал: «Я живу в отеле Калифорния».
Для этого в html нужно писать совсем хитрые комбинации:
Вася сказал: «Я живу в отеле „Калифорния“»
Если вам лениво писать все это от руки можно писать простые кавычки (которые на самом деле являются знаком дюйма), а потом пропустить текст через скрипт и он сам расставит все, как надо. Вдоволь намаявшись со скриптом годичной давности, я решил создать <img src = "сслыка" width = "23" alt= " а тут еще и альт идет" >. Кроме того, не надо забывать про вложенные кавычки и про то, что внутри текста с кавычками может идти любой html тоже с кавычками, например
Вася сказал: «Я живу в отеле „Калифорния“». Ох уж этот Вася.
Внимание! Самую свежую версию кавычкера можно скачать здесь.
function kavych ($contents) // Kavychki (c) Spectator.ru // замена кавычек в html-тэгах на символ "¬" // замена кавычек внутри <code> на символ "¬" // расстановка кавычек: кавычка, перед которой идет ( или > или пробел = начало слова, $contents=preg_replace ( "/([>(s])(")([^"]*)([^s"(])(")/", "1«34»", $contents); // что, остались в тексте нераставленные кавычки? значит есть вложенные! // расставляем оставшиеся кавычки (еще раз). // расставляем вложенные кавычки // конец вложенным кавычкам // расстанавливаем правильные коды и тире // меняем "¬" обратно на кавычки // еще несколько строк кода, которые лично у меня делают всякие полезные вещи return $contents; }
{
$contents=preg_replace ( "/<([^>]*)>/es", "'<'.str_replace ('"', '¬','1').'>'", $contents);
$contents=preg_replace ( "/<code>(.*?)</code>/es", "'<code>'.str_replace ('"', '¬','1').'</code>'", $contents);
// кавычка, после которой не идет пробел = это конец слова.
if (stristr ($contents, '"')):
$contents=preg_replace ( "/([>(s])(")([^"]*)([^s"(])(")/", "1«34»", $contents);
// видим: комбинация из идущих двух подряд открывающихся кавычек без закрывающей
// значит, вторая кавычка - вложенная. меняем ее и идущую после нее, на вложенную (132 и 147)
while (preg_match ("/(«)([^»]*)(«)/", $contents)) $contents=preg_replace ( "/(«)([^»]*)(«)([^»]*)(»)/", "12„4“", $contents);
endif;
$contents = str_replace ('«','«', $contents);
$contents = str_replace ('»','»', $contents);
$contents = str_replace (' - ',' — ', $contents);
$contents = str_replace ('¬','"', $contents);
Вы можете закопипастить
Для тех, кто в танке: кавычки в вышеприведенном коде не «сами расставились», они так и должны быть. Повторяю: Вы можете закопипастить
PS.
Known bug у этого скрипта был только один: скрипт портит програмный код (например, PHP), приведенный на странице в качестве примера:
<? echo («кавычки сосут»); ?>
Есть и путь решения этого бага: использовать тэг CODE для выделения кода на странице: идеологически выдержанно, политически верно и удобно одновременно и сделать так, чтобы скрипт ничего не менял внутри тэгов <code></code>:
<? echo ("кавычки не сосут"); ?>
(смотрите вторую строчку в скрипте)
Update
Комментарий от Александра Крылова.
Есть еще ′ и ″ как раз для того, чтобы с кавычками не путать.
prime = "′" -- prime = minutes = feet (для обозначения минут и футов),
Prime = "″" -- double prime = seconds = inches (для обозначения секунд и дюймов).
Вот вам выход когда нужно обозначить именно дюймы, например: «Монитор 19″»