За последние 24 часа нас посетили 20726 программистов и 1710 роботов. Сейчас ищут 1439 программистов ...

Удаление ссылок из базы

Тема в разделе "MySQL", создана пользователем Vitaliy21, 9 ноя 2013.

  1. Vitaliy21

    Vitaliy21 Новичок

    С нами с:
    26 окт 2013
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте. Подскажите пожалуйста, в базе есть ссылки, с одним доменом, но с разным продолжением ссылок, например:

    Код (Text):
    1. <a href="http://site.ru/123/0">текст1</a>
    2. <a href="http://site.ru/tratata/123">текст2</a>
    3. <a href="http://site.ru/01584"><span style="COLOR: #000000">текст3</span></a>

    Какой можно выполнить запрос, чтобы удалить данные ссылки, но чтоб текст которые внутри тега при этом остался?

    Тоесть, нужно превратить подобного рода ссылок <a href="http://site.ru/123/0">текст1</a> в текст1
     
  2. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    В mySQL можно, но ооочень сложно. Много много проще использовать PHP для удаления тегов. Напишите маленький скриптик в пару десятков строк кода и будет Вам счастье.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  4. Vitaliy21

    Vitaliy21 Новичок

    С нами с:
    26 окт 2013
    Сообщения:
    12
    Симпатии:
    0
    Спасибо, почитал статью, возник вопрос один вопрос, можно как-то использовать тут регулярное выражение?
    Код (Text):
    1. <a href="http://site.ru/[регулярное выражение]">[регулярное выражение]</a>
     
  5. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Да.
     
  6. Vitaliy21

    Vitaliy21 Новичок

    С нами с:
    26 окт 2013
    Сообщения:
    12
    Симпатии:
    0
    На php всё таки сделал:

    Код (Text):
    1.  
    2. <?php  
    3. $db = mysql_connect('host', 'user', 'password');
    4. mysql_select_db('database');  
    5. $query = "SELECT * FROM `table` WHERE `link` LIKE '%\<a %'";
    6. $res = mysql_query($query);
    7. while($row = mysql_fetch_array($res)){
    8.     $newlink=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $row['link']);
    9.     mysql_query("UPDATE `table` SET `link` = '".$newlink."' WHERE `link` = '".$row['link']."';");
    10. }
    11. mysql_close($db);
    12. ?>
    Подскажите, как сделать чтоб данный код удалял ссылки только определённого домена, а на все?

    P.S. Одни люди подсказали что можно использовать preg_replace_callback и в нем проверять адрес, может кто пожалуйста привести пример как в данном случае можно реализовать? А то в программировании плохо разбираюсь...
     
  7. nyaah

    nyaah Новичок

    С нами с:
    15 ноя 2013
    Сообщения:
    1
    Симпатии:
    0
    Код (Text):
    1. $newlink=preg_replace('/<a\s([^>]*)(href\=\"(http:\/\/)?site\.ru([^\"]*)\")([^>]*)>([^<]*)<\/a>/im', '\6', $row['link']);
     
  8. Vitaliy21

    Vitaliy21 Новичок

    С нами с:
    26 окт 2013
    Сообщения:
    12
    Симпатии:
    0
    Попробовал, он почему-то перестал удалять ссылки вида
    Код (Text):
    1. <a title="Инструкция по TP-LINK (на примере 841ND).pdf" href="http://site.ru/download/324/Инструкция%20по%20TP-LINK%20(на%20примере%20841ND).pdf"><span style="font-size: 12px;">Инструкцию по настройке роутеров TP-LINK на Киевстар Домашний Интернет (тип подключения L2TP и DHCP) на примере Роутера TP-LINK 841ND</span></a>
    И нужно, чтоб из приведённого выше примера, он оставлял то, что находится между тегами <a >тут текст оставлять</a>, тоесть в результате должно получится так:
    Код (Text):
    1. <span style="font-size: 12px;">Инструкцию по настройке роутеров TP-LINK на Киевстар Домашний Интернет (тип подключения L2TP и DHCP) на примере Роутера TP-LINK 841ND</span>