Pубрика "Полезные решения на PHP"

Discussion in 'PHP' started by Utochka, 2 May 2006.

  1. Utochka

    Utochka Elder - Старейшина

    Joined:
    21 Dec 2005
    Messages:
    495
    Likes Received:
    106
    Reputations:
    54
    Предлогаю выкладывать сюда полезные решения на php, помоему будет прикольно, перед тем как создать тему человек идет сюды и смотрит есть ли тут готовый пример ну или идет в гугл )

    Вот от меня преобразование BB-тегов в соответствующие HTML-теги.

    PHP:
    <?php
    function bth($content) {

    // Переносы строк
    $content = nl2br($content);

    // Горизонтальная линия
    $content = str_replace("[HR]", "<hr />", $content);

    // Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый
    $content = preg_replace("/\[B\](.+?)\[\/B\]/", "<b>\\1</b>", $content);
    $content = preg_replace("/\[I\](.+?)\[\/I\]/", "<i>\\1</i>", $content);
    $content = preg_replace("/\[U\](.+?)\[\/U\]/", "<u>\\1</u>", $content);
    $content = preg_replace("/\[S\](.+?)\[\/S\]/", "<s>\\1</s>", $content);

    // Нижний и верхний регистр
    $content = preg_replace("/\[SUB\](.+?)\[\/SUB\]/", "<sub>\\1</sub>", $content);
    $content = preg_replace("/\[SUP\](.+?)\[\/SUP\]/", "<sup>\\1</sup>", $content);

    // Мелкий шрифт
    $content = preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/", "<small>\\1</small>", $content);

    // Нестандартный шрифт
    $content = preg_replace("/\[FONT=(.+?)\](.+?)\[\/FONT\]/", "<font face=\"\\1\">\\2</font>", $content);

    // Название шрифта
    $content = preg_replace("/\[SIZE=(.+?)\](.+?)\[\/SIZE\]/", "<font size=\"\\1\">\\2</font>", $content);

    // Цвет шрифта
    $content = preg_replace("/\[COLOR=(.+?)\](.+?)\[\/COLOR\]/", "<font color=\"\\1\">\\2</font>", $content);

    // Выравнивание (По левому краю, По центру, По правому краю)
    $content = preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/", "<div align=\"left\">\\1</div>", $content);
    $content = preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/", "<div align=\"center\">\\1</div>", $content);
    $content = preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/", "<div align=\"right\">\\1</div>", $content);

    // Ссылки
    $content = preg_replace("/\[URL\](.+?)\[\/URL\]/", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $content);
    $content = preg_replace("/\[URL=(.+?)\](.+?)\[\/URL\]/", "<a href=\"\\1\" target=\"_blank\">\\2</a>", $content);

    // E-Mail
    $content = preg_replace("/\[EMAIL\](.+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\1</a>", $content);
    $content = preg_replace("/\[EMAIL=(.+?)\](.+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\2</a>", $content);

    // Изображение
    $content = preg_replace("/\[IMG\](.+?)\[\/IMG\]/", "<img src=\"\\1\" border=\"0\" alt=\"\">", $content);
    $content = preg_replace("/\[IMG=(.+?)\](.+?)\[\/IMG\]/", "<img src=\"\\1\" border=\"0\" alt=\"\\2\">", $content);

    // Список
    $content = preg_replace("/\[LIST\](.+?)\[\/LIST\]/", "<ul type=\"square\">\\1</ul>", $content);
    $content = preg_replace("/\[LIST=(.+?)\](.+?)\[\/LIST\]/", "<ul type=\"\\1\">\\2</ul>", $content);
    $content = preg_replace("/\[\*\](.+?)\[\/\*\]/", "<li>\\1</li>", $content);

    // Цитата
    $content = preg_replace("/\[Q\](.+?)\[\/Q\]/", "<b>Цитата:</b><br /><div class=\"quote\">\\1</div>", $content);

    // Смайлики
    $content = preg_replace("/:(.+?):/", "<img src=\"/images/smiles/\\1.gif\" border=\"0\">", $content);

    return 
    $content;

    }

    // Тест функции
    $text = "[HR]Жирный";
    $text = bth($text);
    echo 
    $text;
    ?>
     
    1 person likes this.
  2. pch

    pch Elder - Старейшина

    Joined:
    22 Oct 2005
    Messages:
    34
    Likes Received:
    41
    Reputations:
    15
    ЧТО??? ИМХО даже в phpbb 1.0 не было такой защиты... Чуть поправил (правил на ходу, поэтому могут быть всякие parse-ошибки...)
    PHP:
    <?php
    function bth($content) {

    // Переносы строк
    $content = nl2br($content);

    // Горизонтальная линия
    $content = str_replace("[HR]", "<hr />", $content);

    // Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый
    $content = preg_replace("/\[B\](.+?)\[\/B\]/", "<b>\\1</b>", $content);
    $content = preg_replace("/\[I\](.+?)\[\/I\]/", "<i>\\1</i>", $content);
    $content = preg_replace("/\[U\](.+?)\[\/U\]/", "<u>\\1</u>", $content);
    $content = preg_replace("/\[S\](.+?)\[\/S\]/", "<s>\\1</s>", $content);

    // Нижний и верхний регистр
    $content = preg_replace("/\[SUB\](.+?)\[\/SUB\]/", "<sub>\\1</sub>", $content);
    $content = preg_replace("/\[SUP\](.+?)\[\/SUP\]/", "<sup>\\1</sup>", $content);

    // Мелкий шрифт
    $content = preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/", "<small>\\1</small>", $content);

    // Нестандартный шрифт
    $content = preg_replace("/\[FONT=([^\"]+?)\](.+?)\[\/FONT\]/", "<font face=\"\\1\">\\2</font>", $content);

    // Название шрифта
    $content = preg_replace("/\[SIZE=(\d+?)\](.+?)\[\/SIZE\]/", "<font size=\"\\1\">\\2</font>", $content);

    // Цвет шрифта
    $content = preg_replace("/\[COLOR=([^\"]+?)\](.+?)\[\/COLOR\]/", "<font color=\"\\1\">\\2</font>", $content);

    // Выравнивание (По левому краю, По центру, По правому краю)
    $content = preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/", "<div align=\"left\">\\1</div>", $content);
    $content = preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/", "<div align=\"center\">\\1</div>", $content);
    $content = preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/", "<div align=\"right\">\\1</div>", $content);

    // Ссылки
    $content = preg_replace("/\[URL\]([a-z]+?)(:\/\/)([^\"]+?)\[\/URL\]/", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\1</a>", $content);
    $content = preg_replace("/\[URL=([a-z]+?)(:\/\/)[^\"]+?)\](.+?)\[\/URL\]/", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\2</a>", $content);

    $content = preg_replace("/\[URL\]([^\"]+?)\[\/URL\]/", "<a href=\"http:\/\/\\1\" target=\"_blank\">\\1</a>", $content);
    $content = preg_replace("/\[URL=([^\"]+?)\](.+?)\[\/URL\]/", "<a href=\"http:\/\/\\1\" target=\"_blank\">\\2</a>", $content);


    // E-Mail
    $content = preg_replace("/\[EMAIL\]([^\"]+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\1</a>", $content);
    $content = preg_replace("/\[EMAIL=([^\"]+?)\](.+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\2</a>", $content);

    // Изображение
    $content = preg_replace("/\[IMG\](http:\/\/)([^\"]+?)\[\/IMG\]/", "<img src=\"\\1\\2\" border=\"0\" alt=\"\">", $content);
    $content = preg_replace("/\[IMG=(http:\/\/)([^\"]+?)\](.+?)\[\/IMG\]/", "<img src=\"\\1\\2\" border=\"0\" alt=\"\\2\">", $content);

    $content = preg_replace("/\[IMG\]([^\"]+?)\[\/IMG\]/", "<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\">", $content);
    $content = preg_replace("/\[IMG=([^\"]+?)\](.+?)\[\/IMG\]/", "<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\\2\">", $content);

    // Список
    $content = preg_replace("/\[LIST\]([^\"]+?)\[\/LIST\]/", "<ul type=\"square\">\\1</ul>", $content);
    $content = preg_replace("/\[LIST=([^\"]+?)\](.+?)\[\/LIST\]/", "<ul type=\"\\1\">\\2</ul>", $content);
    $content = preg_replace("/\[\*\](.+?)\[\/\*\]/", "<li>\\1</li>", $content);

    // Цитата
    $content = preg_replace("/\[Q\](.+?)\[\/Q\]/", "<b>Цитата:</b><br /><div class=\"quote\">\\1</div>", $content);

    // Смайлики
    $content = preg_replace("/:(.+?):/", "<img src=\"/images/smiles/\\1.gif\" border=\"0\">", $content);

    return 
    $content;

    } 
     
    #2 pch, 2 May 2006
    Last edited: 2 May 2006
  3. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    да глупая затея, есть уйма ресурсов где можно найти нужные тебе скрипты. Их там тысячи, просто внимательнее глянуть нужно.
     
    _________________________
  4. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    кошмарный коды, что у первого что у второго.
    Забыли про `
    это фуфло. А вот что забыли про то что бб теги можно поставить внутрь друг друга.
    И все ваши фильтры быстренько наепнуться.
     
  5. pch

    pch Elder - Старейшина

    Joined:
    22 Oct 2005
    Messages:
    34
    Likes Received:
    41
    Reputations:
    15
    2 k1b0rg
    я и не претендовал на bulletproof код! Я лишь хотел указать автору на ПОЛНОЕ отсутствие фильтрации! На то, чтобы превратить этот код во что-то, мне надо ещё минут 10, но надо ли это, учитывая, что кода, выполняющего данную конкретную функцию дофига и больше - НЕТ!
     
    #5 pch, 2 May 2006
    Last edited: 3 May 2006
  6. pch

    pch Elder - Старейшина

    Joined:
    22 Oct 2005
    Messages:
    34
    Likes Received:
    41
    Reputations:
    15
    А про обратный апостраф я что-то не врубил - зафиг его фильтровать, если кавычки и спаренные не пройдут и в тэг не выйдешь?
     
  7. vectorg

    vectorg Противоядие

    Joined:
    7 Aug 2005
    Messages:
    335
    Likes Received:
    140
    Reputations:
    236
    ппц, тема сплошной лол
    Всё это отговорки... Признайте свои ошибки, и старайтесь не делать их в будущем!
     
  8. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Я делаю preg_match_all на бб код и уже работаю\обрабатываю вытащенные переменные. Очень удобно.
     
    _________________________
  9. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    NeX, нафига выложил мой дырявый сркипт бб-кодов :))) Я даже знаю где ты его взял - http://slaed.net/index.php?name=Forums&file=viewtopic&t=3365 .

    Кстати, кто интересуется полезными решениямы, читает по ссылке выше. Там я выкладывал, некоторые даже довольно-таки неплохие решения. Но опыта меньше было - посему дырявее :)
     
  10. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    меня всегда мучал один вопрос - почему многие кодеры пишут:
    PHP:
    "<img src=\"/images/smiles/\\1.gif\" border=\"0\">"
    когда с одинарными кавычками код более удобно читать?
    PHP:
    "<img src='/images/smiles/\\1.gif' border='0'>"
     
  11. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Дикс, вообще двойные кавычки в Html - это как правило хорошего тона, так скажем, и общепринятая традиция. А вот в Php - другой вопрос. Например я пишу двойные только по привычке.
     
  12. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    не знаю причём здесь хороший тон, но если это удобней читать и не является ошибкой синтаксиса, я считаю стоит юзать одинарные. к тому же имхо они красивее :)
     
  13. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Тоже не понимаю причем тут правила хорошего тона. всегда стараюсь везде в html ставить одинакрную ковычку
     
    _________________________
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    А где написаны эти правила? =)
    Дайте ссылку на пункт в спецификациях )))
     
  15. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Дикс, на вкус и цвет... В общем мне не нравится одинарная, да и нигде в мануалах и в ихсодниках w3 не видел одинарных. Разве что в JavaScript, заключенного в двойные кавычки. Давай не будет тут разжить войны и споры, а просто скинем по полезному решению :)))

    Вот вам так называемый аналог AJaX

    Code:
    <script type="text/javascript">
    //<![CDATA[
    function CRO()
    {
        if (window.XMLHttpRequest)
        {
            var object = new XMLHttpRequest();
        }
        else
        {
            var object = new ActiveXObject('Msxml2.XMLHTTP');
            if (!object)
            {
                var object = new ActiveXObject('Microsoft.XMLHTTP');
            }
        }
        return object;
    }
    
    function GetRequest(link, post)
    {
        var request = CRO();
        request.onreadystatechange = function() { if (request.readystate == 4 && request.status == 200) { eval(request.responsetext); } };
        request.open("POST", link, true);
        request.setrequestheader("Content-Type", "application/x-www-form-urlencoded");
        request.send(post);
    }
    //]]>
    </script>
    
    <!--
    
    Поместите в файл http://localhost/rand.php следующий код:
    
        alert("<?php echo rand(1, 999)." | POST 1 = ".$_POST['post1']." | POST 2 = ".$_POST['post2']; ?>");
    
    В результате вы получите примерно такую строку:
    
        555 | POST 1 = test1 | POST 2 = test2
    
    -->
    
    <a href="#" onclick="javascript:GetRequest('http://localhost/rand.php', 'post1=test1&post2=test2');">TEST</a>
     
  16. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Какой ужас ваши бб-код парсеры =)
     
    #16 Zadoxlik, 6 May 2006
    Last edited: 6 May 2006
    1 person likes this.
  17. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    я придумал радикально-новый способ.

    P.s. Трин, кинь в приват свой осику-номер ;)
     
  18. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    2 Developer
    объясни, пожалуйста, что такое AJaX
    и что делает твой код.
     
  19. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    а в гугле набрать не судьба?
     
    1 person likes this.
  20. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26