"PHP" / Говнокод #5289 Ссылка на оригинал

0

  1. 1
$text = preg_replace("#<a(.*?)\/a>|(h.*?:\/\/)?([a-z0-9- .]+\.[a-z ]*)#si","",$text);

Регулярное выражение, задача которого уничтожить все существующие ссылки на сторонние сайты содержащиеся в переменной $text
Друг посчитал, что коду место на этом ресурсе :)

Запостил: wowerwower wowerwower, (Updated )

Комментарии (27) RSS

    • тащемто нежадный астерикс (ноль-или-более) -- не самое страшное зло этого говнокода
      Ответить
      • Ну, остальное тоже не выполняет возложеной на него миссии, но оно по крайней мере чего-то делает, а в этом вообще просто лишний символ ("?" в таком случае ни на что не повлияет, или наоборот "*" не учтется, я не знаю как именно в PHP оно устроено).
        Ответить
    • JS и прочий мусор режет другой фильтр
      function onlytext($text)
      {
      $text = preg_replace ("/[^0-9a-zA-Zа-яА-ЯёЁ \.,!@?%-:;()_+=&\n]/", "", $text);
      $text = str_replace ("'", "", $text);
      return trim($text);
      }
      Ответить
  • Переделал:
    preg_replace("#<a(.*?)\/a>|(http:\/\/|https:\/\/)?([a-z0-9-\.]+\.[a-z]{2,6})#si","",$text);
    Ответить
      • и че? вопрос защиты не стоял резать домены с подобным протоколом, т.к. он уже мало распространен.
        Если принципиально, то его всегда можно добавить
        ftp:\/\/ и все.., но опять же он не добавлялся умышленно к тому же, вы сначало попробуйте, пройдет ли такой домен))
        Ответить
      • Да, подобные конструкции мы потеряем, зато домены без www и без http:// не пройдут, хотя есть решение, скоро сделаю
        Ответить
        • $text = preg_replace("#<a(.*?)\/a>|(ftp:\/\/|http:\/\/|https:\/\/)?[-a-z0-9\.]+\.(ru|by|ua|info|org|com|net|biz|name|g ov|tv)+#si","",$text);
          Готово. Фильтрует самые распространенные домены (кроме IDN), а текст не убивает и mr.smith тож оставит живым
          Ответить
            • Вероятность подобной конструкции крайне низка, но зач0т))
              Ответить
              • Не так низка, как ВНЕЗАПНА.

                А вот ещё: &103;&111;&111;&103;&108;&101;&46;&99;&1 11;&109;
                Ответить
          • .edu
            .РФ

            запилите полный список и положите в паблик. а еще напишите-ка твиттер клиент. их всегда недостаточно!
            Ответить
  • во первых, зачем убирать ссылки, оставляя хтмл? секуритифейл же.
    во-вторых, быть может, strip_tags или что-то вроде поможет?
    Ответить
    • Вы вообще разбираетесь в регулярке и в том, что тут написано? на мой взгляд - нет!
      <a(.*?)\/a> - вот эта часть убивает ссылки вместе с анкором.
      "зачем убирать ссылки, оставляя хтмл?" - вы может топиком ошиблись? )))) Связи ваших слов с представленным кодом вообще не наблюдается
      Ответить
      • Да, вот давно хотел спросить, что символизирует <a(.*?)\/a>? Можно пример соответствия? 😉
        Ответить
        • Если будет ссылка вида
          <a href='http://lobzikov.ru'>lobzikov.ru</a>
          или
          <a href='http://maxref.ru/referat_457_8.html'>Будщее науки</a>
          или
          <a href='http://maxref.ru/referat_457_9.html' title='Крутой реферат'>Крутой реферат</a>
          то этот паттерн его по-любому найдет и вырежет, если используется совместно с preg_replace и ему подобных ф-ций.

          Пример: $text = preg_replace("#<a(.*?)\/a>#si","",$text);
          Ответить
          • Ну кто бы подумал.

            <a name='step3'><h3>Шаг третий</h3></a>
            <abbr title='Говнокод'>ГК</abbr> <a href="http://govnokod&46;ru/5289">такой</a>
            <a href='http://lobzikov&46;ru'>lobzikov&46;ru</a >
            <a href='http://lobzikov&46;ru'>lobzikov&46;ru (конец фрагмента)
            Ответить
            • Пройдут только 2 последние, но ссылки будут неактивные + изначально все проходит через

              function onlytext($text)
              {
              $text = preg_replace ("/[^0-9a-zA-Zа-яА-ЯёЁ \.,!@?%-:;()_+=&\n]/", "", $text);
              $text = str_replace ("'", "", $text);
              return trim($text);
              }
              Ответить
              • В том-то и дело, что эти регэкспы
                1) не режут всё, что нужно;
                2) режут что не нужно.

                Следовательно, они
                1) бесполезны;
                2) вредны.
                Ответить
        • Принцип действия базируется на поиске содержимого после "
          <a" и до "/a>" и замены найденного на "".
          Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8