Автор Тема: замена кавычек на елочки  (Прочитано 8053 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« : 25 Мая 2004, 10:39:33 »
Здравствуйте.
У меня проблемка не могу нормально заменить кавычки на елочки
где то вычетал что это осуществляется так
справа ^str.match[(\\b(?:[.,!?])?)"][g]{${match.1}»^;}
слева ^str.match["(\\b)][g]{«^;$match.1}

но я чет не въеду - тут как то заумно написано - как это в коде то реализовать?

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #1 : 25 Мая 2004, 10:59:51 »

	
define("TAG1","\\xAC"); 
	
define("TAG2","\\xAD"); 
	
define("LAQUO","«"); 
	
define("RAQUO","»"); 
	
define("LDQUO","«"); 
	
define("RDQUO","»"); 
	
define("MDASH","\\x97"); 
	
define("NDASH","\\x96"); 
	
define("APOS","\\xB4"); 
	
define("HELLIP","\\x85"); 
	

	
$Refs = array();
	
$RefsCntr 0;
class 
CString
{
	
var 
$Stream;
	
var 
$OutStream;
	
function 
CString()
	
{
	
	
global 
$Refs,$RefsCntr;
	
	
$Refs = array(); // буфер для хранения тегов 
	
	
$RefsCntr 0;   // счётчик буфера 

	
}

function 
szCleanHTML($x

	
global 
$Refs,$RefsCntr;
    
$Refs[] = StripSlashes($x[0]); 
    return 
TAG1.($RefsCntr++).TAG2

function 
szRetHTML($x

global 
$Refs,$RefsCntr;
    return 
$Refs[$x[1]]; 


function 
szTypograf($text,$isHTML true
{
	
global 
$Refs,$RefsCntr;
    if(
$isHTML
    { 
       

        
// комментарии 
        
$text preg_replace_callback(\'{<!--.*?-->}s\', array($this,\'szCleanHTML\'), $text); 
        $PrivateTags = "title|script|style|pre|textarea"; 
        $text = preg_replace_callback(\'{<\\s*(\'.$PrivateTags.\')[\\s>].*?<\\s*/\\s*\\1\\s*>}is\',array($this,\'szCleanHTML\'), $text); 

        // обычные теги 
        $text = preg_replace_callback(\'{<(?:[^\\\'"\\>]+|".*?"|\\\'.*?\\\')+>}s\',array($this,\'szCleanHTML\'),$text); 
    } 

 

    $prequote = \'\\\\s\\\\(\\\\[\\\\{";-\'; 
    $text = preg_replace(\'{^"}\', LAQUO, $text); 
    $text = preg_replace(\'{(?<=[\'.$prequote.\'])"}\', LAQUO, $text); 

    // а это для тех, кто нарушает ВЕЛИКОЕ ПРАВИЛО 
    $text = preg_replace(\'{^((?:\'.TAG1.\'\\d+\'.TAG2.\')+)"}\', \'\\1\'.LAQUO, $text); 
    $text = preg_replace(\'{(?<=[\'.$prequote.\'])((?:\'.TAG1.\'\\d+\'.TAG2.\')+)"}\', \'\\1\'.LAQUO, $text); 



    $text = str_replace(\'"\', RAQUO, $text); 


    $text = preg_replace(\'{\'.LAQUO.RAQUO.\'}\', LAQUO.LAQUO, $text); 
    $text = preg_replace(\'{\'.RAQUO.LAQUO.\'}\', RAQUO.RAQUO, $text); 

    //    вложенные кавыки 
    $i=0; // - это защита от зацикливания (оно возможно в случае неправильно расставленных кавычек) 
    while (($i++<10) && preg_match(\'{\'.LAQUO.\'(?:[^\'.RAQUO.\']*?)\'.LAQUO.\'}\', $text)) 
        $text = preg_replace( 
            \'{\'.LAQUO.\'([^\'.RAQUO.\']*?)\'.LAQUO.\'(.*?)\'.RAQUO.\'}s\', 
            LAQUO.\'\\1\'.LDQUO.\'\\2\'.RDQUO, $text); 

    $i=0; 
    while (($i++<10) && preg_match(\'{\'.RAQUO.\'(?:[^\'.LAQUO.\']*?)\'.RAQUO.\'}\', $text)) 
        $text = preg_replace( 
            \'{\'.RAQUO.\'([^\'.LAQUO.\']*?)\'.RAQUO.\'}\', 
            RDQUO.\'\\1\'.RAQUO, $text); 


    $text = preg_replace(\'{^-+(?=\\s)}\',MDASH,$text); 
    $text = preg_replace(\'{(?<=[\\s\'.TAG2.\'])-+(?=\\s)}\',MDASH,$text); 
    $text = str_replace(\' \'.MDASH,\' \'.MDASH,$text); 
    // ndash: 
    $text = preg_replace(\'{(?<=\\d)-(?=\\d)}\',NDASH,$text); 
    // ...: 
    $text = str_replace(\'...\',HELLIP,$text); 
    // апостроф: 
    $text = preg_replace(\'{(?<=\\S)\\\'}\',APOS,$text); 


    if($isHTML) 
    { 
        // возвращаем взятое обратно 
        while (preg_match(\'{\'.TAG1.\'.+?\'.TAG2.\'}\', $text)) 
            $text = preg_replace_callback(\'{\'.TAG1.\'(.+?)\'.TAG2.\'}\', array($this,\'szRetHTML\'), $text); 
       
    } 


    $text = str_replace( 
        array(LAQUO,RAQUO,LDQUO,RDQUO,MDASH,NDASH,HELLIP,APOS), 
        array(\'&laquo;\',\'&raquo;\',\'&bdquo;\',\'&ldquo;\',\'&#8212;\',\'&#8211;\',\'&hellip;\',\'&#8217;\'), 
        $text 
    ); 
    return $text; 

} // }}  CString
AS IS...

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #2 : 25 Мая 2004, 11:00:53 »
нифигово!
а что тока так - покороче код нельзя сделать?

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #3 : 25 Мая 2004, 11:02:23 »
можно.
как-нить сам.
мне покороче не нужно.
тока он слеши хад порезал.
AS IS...

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #4 : 25 Мая 2004, 11:07:41 »
собно это переработанное в класс
http://hiero.ru/david/typographer.php
так как предидущая версия не совсем корректно обрабатывала HTML и перестала удовлетворять.
AS IS...

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #5 : 25 Мая 2004, 11:10:13 »
Да но то что я привел - хз отекуда.
там все в одну строку выражено - тока на каком языке это я не знаю - предпологаю перл.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #6 : 25 Мая 2004, 11:15:28 »
stanlee
если ты хочешь делать по-человечески, заменять не только "елочки" и НЕ заменять внутри  хтмл тегов, то двумя строчками не обойдешься.
в противном случае вообще забудь о своем вопросе.

вот тебе еще одна
http://textus.ru/freeware/kavychker

и хватит вертеть носом.

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #7 : 25 Мая 2004, 11:40:08 »
А как этот класс вызыват то? :)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #8 : 25 Мая 2004, 11:46:47 »
stanlee
http://www.php.net
читаем доку
AS IS...

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #9 : 25 Мая 2004, 11:49:02 »
да дока мне не поможет я с классами и регулярками ужиться ну не могу и все - регулярку я еще кое как понимаю но классы почему то не могу понять - че за хрень, поэтому по жизни я пытаюсь классы обходить

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #10 : 25 Мая 2004, 11:53:54 »
stanlee
тогда переписывай.
AS IS...

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #11 : 25 Мая 2004, 11:56:26 »
:)
ну я попробовал
$CString = new CString;
$CString -> CString("ля ля ля");
если конечно правильно - ничего не вернулось
и еще ругается пехепе что ошибка
тут
$text = preg_replace_callback(\'{<(?:[^\'">]+|".*?"|\'.*?\')+>}s\', array($this, \'szCleanHTML\'), $text);
и тут
$text = preg_replace(\'{(?<=S)\'}\', APOS, $text);
???

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #12 : 25 Мая 2004, 12:37:16 »
stanlee
ну и неправильно пробовал
потом я написал, что форум слеши порезал.
AS IS...

Оффлайн stanlee

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 215
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
замена кавычек на елочки
« Ответ #13 : 25 Мая 2004, 12:47:38 »
а как правильно ? :(

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
замена кавычек на елочки
« Ответ #14 : 25 Мая 2004, 13:04:50 »
ThE0ReTiC
Я так понял, основная функция у hiero.ru/david - TypoAll с передачей строки текста?

Цитировать
как предыдущая версия не совсем корректно обрабатывала HTML и перестала удовлетворять

А подробнее???
LJ: Backslashed life (rss)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28