Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Удаление html тега из базы (http://forum.oszone.net/showthread.php?t=272018)

Vitaliy21 14-11-2013 11:58 2254331

Удаление html тега из базы
 
Здравствуйте, нужна помощь составить 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, а то я в программирование мало что понимаю, а дело вроде как пустяковое...

LilLoco 14-11-2013 14:08 2254415

Vitaliy21, можно составить простенький запрос к БД.

PHP код:

UPDATE имя таблицы SET имя колонки Substring(имя колонкиinstr(имя колонки'>')+1, (instr(имя колонки'</a>') - 1)-instr(имя колонки'>')) 

Не уверен в правильности составления. Не знаком с функциями MySql. Для предотвращения проблем, попробуйте сначала выполнить выборку из таблицы и посмотреть результат.

PHP код:

SELECT имя колонки Substring(имя колонкиinstr(имя колонки'>')+1, (instr(имя колонки'</a>') - 1)-instr(имя колонки'>')) FROM имя таблицы 


DedAlex 14-11-2013 14:47 2254447

С помощью PHP несложно.
Для начала из базы получаете нужную строку, потом
PHP код:

$s=preg_replace("'<[\/\!]*a[^<>]*?>'si"''$s); 

и записываете ее обратно в базу.

Vitaliy21 14-11-2013 17:22 2254567

Цитата:

Цитата LilLoco
можно составить простенький запрос к БД. »

Спасибо, я проверил, Ваш запрос только удаляет конец тега "</a>"

Подскажите пожалуйста, как сделать чтобы при этом он удалял и начало тега, учитывая такие параметры? : <a href="http://site.ru/тут разное продолжение" target="_blank" title="какой-то текст">

Цитата:

Цитата DedAlex
С помощью PHP несложно.
Для начала из базы получаете нужную строку, потом
Код:

$s=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $s);
и записываете ее обратно в базу.
»

Можете подробной пожалуйста объяснить как это реализовать?

DedAlex 14-11-2013 19:24 2254698

Код для изменения.
PHP код:

<?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 2254876

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>
Тоесть ссылка, внутри которой картинка, можно и в этом случае удалить ссылку оставив картинку?
Или он и так должен был её удалить, но не успел обработать все строки (их там очень много)?

DedAlex 15-11-2013 11:49 2255093

Цитата:

Цитата Vitaliy21
Или он и так должен был её удалить, но не успел обработать все строки (их там очень много)? »

Должен убрать, не успел обработать. Попробуйте заменить запрос
PHP код:

$query "SELECT * FROM `table` WHERE `link` LIKE '%\<a %'"


Vitaliy21 15-11-2013 12:57 2255164

Спасибо большое, отработало как надо!


Время: 02:27.

Время: 02:27.
© OSzone.net 2001-