MySQL извлекает открытый текст из html-данных или PHP?

Как заголовок, если я вложу какой-нибудь html в таблицу. Как я могу использовать mysql для извлечения открытого текста между тегами html?
Например:

CREATE TABLE `test` ( `id` INT PRIMARY KEY, `plain` LONGTEXT ) INSERT INTO `text` VALUES (1, '<p>text between tag 'p'</p><span>text between 'span'</span>'); 

И перед вставкой, я хочу использовать триггер, чтобы извлечь простой текст, который я хочу. Как?
Или использовать php? Я имею в виду передать html скрипту php, а скрипт php выполняет извлечение.

Обновить

Но есть решение для моей проблемы, используя php, как насчет mysql?

Если ваш контент всегда начинается с тегов (и т. Д.),

попробуй это:

 SELECT * from table WHERE colmn_name REGEXP '>[^<]*mytext'; 

Другой способ – использовать strip_tags – Стриптиз HTML и PHP-теги из строки

 <?php $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; echo strip_tags($text); echo "\n"; // Allow <p> and <a> echo strip_tags($text, '<p><a>'); ?> 

Вывод кода выше:

 Test paragraph. Other text <p>Test paragraph.</p> <a href="#fragment">Other text</a> 

Предупреждение :: Because strip_tags() does not actually validate the HTML, partial or broken tags can result in the removal of more text/data than expected.

Вы должны поместить код html в переменную, скажем, $html_input

 $html_input= "'<p>text between tag 'p'</p><span>text between 'span'</span>'"; $stripped_html = strip_tags($html_input); // Now insert it into the table `text` INSERT INTO `text` VALUES (1, $striped_html); 

Чисто MQSQL :

 CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT DEFAULT 1; LOOP SET $start = LOCATE("<", $str, $start); IF (!$start) THEN RETURN $str; END IF; SET $end = LOCATE(">", $str, $start); IF (!$end) THEN SET $end = $start; END IF; SET $str = INSERT($str, $start, $end - $start + 1, ""); END LOOP; END; mysql> select strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.'); +----------------------------------------------------------------------+ | strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.') | +----------------------------------------------------------------------+ | hello world again. | +----------------------------------------------------------------------+ 1 row in set 

Ссылка: Stackoverflow

Используйте strip_tags() в строке, сохраните результат в переменной и затем используйте ее в своем запросе:

 $str = "'<p>text between tag 'p'</p><span>text between 'span'</span>'"; $str = strip_tags($str); //'text between tag 'p'text between 'span'' $str = mysql_real_escape_string($str); //just for safety 

В вашем запросе:

 INSERT INTO `text` VALUES (1, $str); 

Документация: strip_tags() , mysql_real_escape_string()

Надеюсь это поможет!

Вы можете сделать это и в самой MySQL. Вам нужен эквивалент striptags php Funktion. Взгляните сюда

http://www.sitepoint.com/forums/showthread.php?656167-PHP-s-strip_tags()-equivalent-MYSQL-function

Обновление с некоторыми изменениями из одного из приведенных выше ответов.

 DELIMITER *** CREATE FUNCTION ConvertHTMLToText(str LONGTEXT CHARSET utf8) RETURNS LONGTEXT CHARSET utf8 BEGIN DECLARE start, end INT DEFAULT 1; LOOP SET start = LOCATE("<", str, start); IF (!start) THEN RETURN str; END IF; SET end = LOCATE(">", str, start); IF (!end) THEN SET end = start; END IF; SET str = TRIM(INSERT(str, start, end - start + 1, "")); END LOOP; END ***