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:
    729
    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:
    729
    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:
    729
    Reputations:
    266
    а в гугле набрать не судьба?
     
    1 person likes this.
  20. Дикс

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

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