Показать полную графическую версию : [решено] Удаление html тега из базы
Vitaliy21
14-11-2013, 11:58
Здравствуйте, нужна помощь составить SQL запрос или php скрипт по удалению одних тегов из одного столбца в базе данных.
Мне нужно превратить напримере такие ссылки:
<a href="http://site.ru/123/0">текст1</a>
<a href="http://site.ru/tratata/123">текст2</a>
<a href="http://site.ru/01584"><span style="COLOR: #000000">текст3</span></a>
В обычных текст (неклекабельный), тоесть без тегов <a ...>...</a>
Результат из приведённого примера должен получится такой:
текст1
текст2
<span style="COLOR: #000000">текст3</span>
Да и ещё, ссылок таких много, с одним доменом, но продолжение ссылок и текст будет разным, поэтому тут я так понимаю понадобится регулярное выражение?
<a href="http://site.ru/[регулярное выражение]">[регулярное выражение]</a>
Помогите пожалуйста, кто разбирается в MySQL или в php, а то я в программирование мало что понимаю, а дело вроде как пустяковое...
Vitaliy21, можно составить простенький запрос к БД.
UPDATE имя таблицы SET имя колонки = Substring(имя колонки, instr(имя колонки, '>')+1, (instr(имя колонки, '</a>') - 1)-instr(имя колонки, '>'))
Не уверен в правильности составления. Не знаком с функциями MySql. Для предотвращения проблем, попробуйте сначала выполнить выборку из таблицы и посмотреть результат.
SELECT имя колонки = Substring(имя колонки, instr(имя колонки, '>')+1, (instr(имя колонки, '</a>') - 1)-instr(имя колонки, '>')) FROM имя таблицы
С помощью PHP несложно.
Для начала из базы получаете нужную строку, потом
$s=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $s);
и записываете ее обратно в базу.
Vitaliy21
14-11-2013, 17:22
можно составить простенький запрос к БД. »
Спасибо, я проверил, Ваш запрос только удаляет конец тега "</a>"
Подскажите пожалуйста, как сделать чтобы при этом он удалял и начало тега, учитывая такие параметры? : <a href="http://site.ru/тут разное продолжение" target="_blank" title="какой-то текст">
С помощью PHP несложно.
Для начала из базы получаете нужную строку, потом
$s=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $s);
и записываете ее обратно в базу.
»
Можете подробной пожалуйста объяснить как это реализовать?
Код для изменения.
<?php
//Следующую строку необходимо отредактировать
$db = mysql_connect('host', 'user', 'password');
//Следующую строку необходимо отредактировать
mysql_select_db('database');
//Следующую строку необходимо отредактировать
$query = "SELECT * FROM `table`";
$res = mysql_query($query);
while($row = mysql_fetch_array($res)){
$newlink=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $row['link']);
//Следующую строку необходимо отредактировать
mysql_query("UPDATE `table` SET `link` = '".$newlink."' WHERE `link` = '".$row['link']."';");
}
mysql_close($db);
?>
P.S. Попробуйте сначала на копии базы.
Vitaliy21
15-11-2013, 00:44
DedAlex, спасибо! Отредактировал, запустил, страничка долго висела, после 5-7 минут вылезла 504 Gateway Time-out
Но, я проверил, скрипт отработал как надо, он удалил большинство ссылок, но не все. Ссылки такого вида он оставил без изменения:
<a href="http://site.ru/goods#p61633" target="_blank"><img align="center" src="/pictures/orig/5/536/5536.jpg" cwidth="50" cheight="64" owidth="50" oheight="64" imgid="5536" style="margin:5px;height: 64px;width: 50px" width="50" height="64" /></a>
Тоесть ссылка, внутри которой картинка, можно и в этом случае удалить ссылку оставив картинку?
Или он и так должен был её удалить, но не успел обработать все строки (их там очень много)?
Или он и так должен был её удалить, но не успел обработать все строки (их там очень много)? »
Должен убрать, не успел обработать. Попробуйте заменить запрос
$query = "SELECT * FROM `table` WHERE `link` LIKE '%\<a %'";
Vitaliy21
15-11-2013, 12:57
Спасибо большое, отработало как надо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.